3. Angular中的组件及服务

  • 组件(component)

    • 可以使用ng generate component xxx来创建组件相关文件html文件、样式表、ts文件、spec.ts单元测试文件
    • 组件的命名默认要符合XxxComponent,除非关掉tslint中的component-class-suffix设置
    • selector的命名默认要符合app-xxx,除非在tslint中修改component-selector的规则内容
    • 所有的组件都要在NgModule中注册声明
    "component-selector": [
      true,
      "element",
      "makealife",
      "kebab-case"
    ]
  • 可以通过组件工厂动态判断和创建组件

    • 下例是在某个时机动态创建某个容器中的组件,这样可以动态选择创建不同的组件,或者在某个container中切换锁显示的组件
<ng-container #stepperContainer></ng-container>
<ng-container *ngIf="!isStepperComponentLoaded">
  ...
</ng-container>

import { Component, ComponentFactoryResolver, OnInit, ViewChild, ViewContainerRef } from '@angular/core';

export class XXXComponent implements OnInit {

    constructor(private componentFactoryResolver: ComponentFactoryResolver) { }

    loadStepperComponent() {
        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ConfigStepperComponent);
        this.stepperContainer.clear();
        this.stepperContainer.createComponent(componentFactory);
        this.isStepperComponentLoaded = true;
    }
}
  • 如果是通过Angular的路由第二次回到本页面,而不是通过刷新页面,那么上次加载的组件可能不会被销毁和重建,因此有时会有点问题,可以在路由中让本组件一直认为自己是第一次加载页面,那么就每次都会重建组件?可行吗?
this.router.routeReuseStrategy.shouldReuseRoute = function () {
  return false;
};

this.mySubscription = this.router.events.subscribe((event) => {
  if (event instanceof NavigationEnd) {
    // Trick the Router into believing it's last link wasn't previously loaded
    this.router.navigated = false;
  }
});

ngOnDestroy() {
  if (this.mySubscription) {
    this.mySubscription.unsubscribe();
  }
}

原文地址:https://www.cnblogs.com/wyp1988/p/12510068.html

时间: 2024-08-30 13:42:02

3. Angular中的组件及服务的相关文章

angular 中父组件调用子组件的方法

angular中 父组件调用子组件的方法 -- 使用 @ViewChild 装饰器修饰子组件,获取方法,调用 除此之外 ViewChild 还可以获取 DOM ,操作 DOM , 详见: https://www.cnblogs.com/monkey-K/p/11567098.html 1. html 中使用 #var 方式标记 子组件 <div style="border: 1px solid red"> <p>子组件:</p>> <ap

Angular中父子组件双向绑定传值

下面为大家展示一个较为简单的ng父子组件双向绑定传值,下面是父组件页面 这个页面的大概功能就是父组件(红色)通过输入框输入内容反映到子组件上进行展示,并且进行了投影, 子组件(橙黄色)通过Input输入框输入内容反映到父组件上,并且使用了@Output传值给父组件 下面是父组件的页面 父组件ts 子组件页面 子组件ts 我主要来说下需要注意的几个地方,第一个就是当我利用子组件的@Output发射数据给父组件的时候, import { EventEmitter } from '@angular/c

高效利用Angular中内置服务

AngularJS中为我们提供了众多的内置服务,通过这些内置服务可以轻松的实现一些常用功能.下面对Angular中常用的内置服务进行一下总结. 1.$location服务 $location服务用于返回当前页面的URL地址,示例代码如下: var app = angular.module('myApp', []); app.controller('customersCtrl', function($scope, $location) { $scope.myUrl = $location.absU

Tomcat中的服务器组件和 服务组件

开始学习Tocmat时,都是学习如何通过实例化一个连接器 和 容器 来获得一个Servlet容器,并将连接器  和 servlet容器相互关联,但是之前学习的都只有一个连接器可以使用,该连接器服务8080端口上的HTTP请求,无法添加另一个连接器来服务 诸如 HTTPS之类的其他请求,而且前面所有学的示例,都缺少一种启动或者 关闭servlet容器的机制,那么下面学习一下提供这两种机制的特性的组件,分别是服务器组件 和 服务组件. 服务器组件. org.apahce.catalina.Serve

angular 中组件的生命周期函数

angular 中的生命周期:  组件加载时,生命周期函数的执行顺序: 00 -- constructor: 首先执行构造函数,一般用来初始化变量,不应该做其他事情 01 -- ngOnChanges:  当被绑定输入属性的值发生变化时执行,父子组件传值的时候自动调用.没有输入属性值变化,不执行该函数 02 -- ngOnInit:  初始化指令和组件时执行,只执行一次.请求数据一般放在该函数内 03 -- ngDoCheck() : 绑定的属性值发生变化时执行,比如双向数据绑定,改变属性,都会

Angular中的jsonp

1.一般我们使用Angualr中的jsonp值这样使用的:注入$http服务 这样使用jsonp的方式可以支持多数api,但是douban不支持无法使用 1 module.controller('InTheatersController',['$scope','$http', function($scope,$http){ 2 4 var doubanApiAddress = 'https://api.douban.com/v2/movie/in_theaters'; 5 6 /!*在angua

Angular 2.0 基础:服务

什么是服务(Service) 在Angular 2 中我们提到的服务 service 一般指的是 哪些能够被其他组件或者指令调用的 单一的,可共享的 代码块.当然,通过服务可以将数据和组件分开,这样就可以实现更多的组件共享服务数据,服务能够使我们提高代码的利用率,方便组件之间共享数据和方法,方便测试和维护.在Angualr 文档中我们能看到这样的描述: Multiple components will need access to hero data and we don't want to c

Angular中的内置指令和自定义指令

NG中的指令,到底是什么(what)? 为什么会有(why)?以及怎样使用(how)? What: 在NG中,指令扩展HTML功能,为 DOM 元素调用方法.定义行为绑定数据等. Why: 最大程度减少DOM操作,实现数据绑定,与业务逻辑进行交互. How: 指令主要分为两种:内置指令和自定义指令,通过下面的例子,简单记录一下如何去使用. 内置指令 在官方API文档上罗列了很多指令,内置指令可以分为:普通指令 和 事件指令,他们都是作用于HTML之上的,通过添加属性的方式来实现的.简单看一下一些

Angular动态创建组件之Portals

这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Portals可以翻译为 门户 ,我觉得放到这里叫 入口 更好,可以理解为动态创建组件的入口,类似于小程序或者Vue中的Slot. cdk全名Component Development Kit 组件开发包,是Angular官方在开发基于Material Design的组件库时抽象出来单独的一个开发包,里面