我们通过一个NgModule来启动一个ng app,NgModule通过bootstrap配置来指定应用的入口组件。

@NgModule({
bootstrap: [ AppComponent ],
....
}

在 declarations 可以配置sub_component

declarations: [
FriendsComponent,
ChatsComponent
]

如下构造一个TestComponent:

import {
Component, OnInit, Input, OnChanges, SimpleChanges, AfterContentInit, AfterContentChecked, AfterViewChecked,
AfterViewInit,DoCheck,OnDestroy, Output, EventEmitter, HostBinding, HostListener
} from '@angular/core';
import {AppComponent} from '../app.component'; @Component({
/*
定义css选择器,
使用:
<app-test [app]="config"></app-test>
[app]="config" 表示父组件向TestComponent输入的信息
*/
selector: 'app-test',
/*
组件的模板文件,如果模板文件代码不多,可以使用:
template:'<span></span>'
*/ templateUrl: './test.component.html',
/*
组件的样式,同样可以类似使用:
styles:[
{
color:'red'
}
]
*/
styleUrls: ['./test.component.css']
}) export class TestComponent implements OnInit,OnChanges,AfterContentInit,AfterContentChecked,AfterViewChecked,AfterViewInit,DoCheck,OnDestroy { @Input()
app:Object;
@Input('config') set updateParent(app:Object){
this.parent = app;
}
public parent = {};
public title = 'hello';
private name = 'test ng component';
init(){
//this.title = 'hello ng2.'
console.log('inited..');
this.name = this.name + 'in init.';
}
alertName(){
alert(this.name);
}
constructor() {
//构造函数一般用于接收组件初始化时的一些提供商,比如:Http模块,自定义service等;
//不适合写太多的逻辑代码;
/*constructer()constructor(
public appState: AppState,public router:Router,http:Http,public envSvc:EnvSvc) {
this.envSvc = envSvc;
}
*/
this.title = 'test comp1';
this.name = this.name + 'in constructor.';
} ngOnChanges(changes: SimpleChanges): void {
//在组件数据绑定输入的值发生变化时执行,在本例中,app属性的输入发生变化时,即执行ngOnChanges
//该方法的应用范围是:指令和组件
console.log(changes);
console.log('ngOnChanges ..');
} ngOnInit() {
//在第一次的ngOnChanges之后执行,此时即开始初始化组件/指令
//该方法在一个 组件/指令 实例的生命周期中只执行一次
//该方法的应用范围是:指令和组件
this.init();
} ngDoCheck(): void{
//input的属性每次变化都会触发angular的变化检测
// 在每次angular变化检测时执行ngDoCheck
//该方法的应用范围是:指令和组件
console.log('angular is checking changes ');
} ngAfterContentInit(): void {
//在组件第一次接收数据输入之后,会将数据映射到组件模板
//这个映射完成后执行ngAfterContentInit
//该方法在一个 组件/指令 实例的生命周期中只执行一次
//该方法的应用范围是:指令 console.log('content has been inited...');
} ngAfterContentChecked(): void {
//在组件检查到数据变化之后,会将新的数据映射到组件模板
//这个映射完成后执行ngAfterContentChecked
//该方法的应用范围是:指令
/*
1.新的数据映射到模板之后,才开始创建视图,即ngAfterContentInit和ngAfterContentChecked在ngAfterViewInit之前执行,
2.子组件的视图初始化或视图检查完成后才会触发当前组件的ngAfterViewInit或ngAfterViewChecked
所以AppComponent的ngAfterViewChecked总是在所有字组件的视图都渲染完毕之后执行
3.在初始化完成之后的每一次数据变化是,总是应用根组件的ngAfterContentChecked先执行,
然后每个子组件/指令内 ngAfterContentChecked()->ngAfterViewChecked()依次执行,
对整个应用而言,最后执行的方法是根组件的ngAfterViewChecked(),
4.一个子组件的数据变化最先触发根组件的ngAfterContentChecked,
然后是中间组件(根组件的子组件,变化组件的父级组件)的ngAfterContentChecked,
之后是变化组件的ngAfterContentChecked()->ngAfterViewChecked()
再执行父组件的ngAfterViewChecked(),
最后才执行根组件的ngAfterViewChecked()
*/
console.log('content has been checked...');
} ngAfterViewInit(): void {
//在初始化组件视图和子组件视图之后执行
//AfterViewInit就是指:页面视图初始化之后
//该方法在一个 组件/指令 实例的生命周期中执行一次
//该方法的应用范围是:指令
console.log('view has been inited...');
} ngAfterViewChecked(): void {
//在组件或子组件视图检查之后执行
//在输入数据变化时,ng根据新的数据对页面进行检查和重新渲染
//AfterViewChecked就是:视图检查之后
//该方法的应用范围是:指令
console.log('view has been checked...');
} ngOnDestroy(): void{
//在组件销毁时执行
//一些组件如果在*ngIf指令之内,条件为false时,该组件会被销毁,此时会执行此方法
//该方法在一个 组件/指令 实例的生命周期中执行一次
//该方法的应用范围是:指令和组件
} //将某个元素属性绑定到某个指令或者组件的属性
@HostBinding('style.disable') 'disabled';
//将某个事件绑定到组件
@HostListener('click',['$event']) function(){alert('test component @HostListener')
};
}

  

Angular2 - Starter - Component and Component Lifecircle Hooks的更多相关文章

  1. angular2 学习笔记 ( Dynamic Component 动态组件)

    更新 2018-02-07 详细讲一下 TemplateRef 和 ViewContainerRef 的插入 refer : https://segmentfault.com/a/1190000008 ...

  2. angular2使用ng g component navbar创建组件报错

    Error: ELOOP: too many symbolic links encountered, stat 'C:\Users\inn\angulardemo\node_modules\@angu ...

  3. Angular2 - Starter - Routes, Route Resolver

    在基于Angualr的SPA中,路由是一个很重要的部分,它帮助我们更方便的实现页面上区域的内容的动态加载,不同tab的切换,同时及时更新浏览器地址栏的URN,使浏览器回退和前进能导航到历史访问的页面. ...

  4. Salesforce LWC学习(四) 父子component交互 / component声明周期管理 / 事件处理

    我们在上篇介绍了 @track / @api的区别.在父子 component中,针对api类型的变量,如果声明以后就只允许在parent修改,son component修改便会导致报错. sonIt ...

  5. Angular2 - Starter - Pipes, Custom Pipes

    在Angular2 模板中,我们在显示数据时,可以使用通道将数据转换成相应的格式的值的形式来显示,而且这不改变源数据.比如,我们可以使用date通道来转换时间显示的格式: {{date | date: ...

  6. [转]angular2: including thirdparty js scripts in component

    本文转自:https://stackoverflow.com/questions/35570746/angular2-including-thirdparty-js-scripts-in-compon ...

  7. [React] Refactor a Class Component with React hooks to a Function

    We have a render prop based class component that allows us to make a GraphQL request with a given qu ...

  8. [Angular2 Form] Create custom form component using Control Value Accessor

    //switch-control component import { Component } from '@angular/core'; import { ControlValueAccessor, ...

  9. [Recompose] Add Lifecycle Hooks to a Functional Stateless Component using Recompose

    Learn how to use the 'lifecycle' higher-order component to conveniently use hooks without using a cl ...

随机推荐

  1. eMMC(KLM8G2FE3B)

     Tiny4412原理图中,eMMC是169-PIN,资料中对应内存为16/32G:而用户手册上eMMC内存为4G,对应的是153-PIN?    原理图中上标注:KLM8G2FE3B-B001_1. ...

  2. XP中IIS“HTTP 500 - 内部服务器错误”解决方法

    我先把主要过程叙述一下,叙述完有每个问题的具体操作方法. 今天我在XP上安装IIS,运行网站出现"HTTP 500 - 内部服务器错误". 打开HTML没有问题,打开ASP文件时就 ...

  3. check约束条件

    --约束:对列的值起一个约束性的作用,规定列的值的范围 --主键.外键.非空.自增长标识列.唯一列(unique).check约束 --check 约束 --在某个表里点击右键→设计→进去找到要约束的 ...

  4. bzoj1444

    显然自动机上高斯消元根据AC自动机上的转移可以列出一系列方程但这个样的方程解出来全0是一组解说明有线性组合的情况考虑除非没人能赢,否则每个人赢的概率和为1那么我们只要把原来的第一个方程换成这个即可 . ...

  5. java Enumeration用法

    Enumeration是java.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法. 在Enumeration中提供了方法hawMoreElement()来判断集合中是束 ...

  6. HDOJ --- 1258

    #include<map> #include<string> #include<cstdio> #include<cstring> #include&l ...

  7. MVC视图中ViewStart/RenderSection/Layout/Partial

    1.母板页_Layout.cshtml 2.部分视图 3.默认Layout引用的使用(_ViewStart.cshtml) Layout = "~/Views/Shared/_Layout. ...

  8. UVA 3890 Most Distant Point from the Sea(二分法+半平面交)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11358 [思路] 二分法+半平面交 二分与海边的的距离,由法向量可 ...

  9. octopress Endless Error With Gem Dependencies

    因为重装系统的缘故,需要重新搭建octopress环境,在执行到: bundle install 会出现一些这样的错误:An error occurred while installing timer ...

  10. [学习笔记]设计模式之Factory Method

    写在前面 为方便读者,本文已添加至索引: 设计模式 魔法手札索引 在上篇笔记Abstract Factory设计模式中,时の魔导士创建了一系列的FoodFactory,并教会了其中一名霍比特人theC ...