1. 说明

Angular每个组件都存在一个生命周期,从创建,变更到销毁。Angular提供组件生命周期钩子,把这些关键时刻暴露出来,赋予在这些关键结点和组件进行交互的能力。

2. 接口

按照生命周期执行的先后顺序,Angular生命周期接口如下所示

名称

时机

接口

范围

ngOnChanges

当被绑定的输入属性的值发生变化时调用,首次调用一定会发生在 ngOnInit之前。

OnChanges

指令和组件

ngOnInit

在第一轮 ngOnChanges 完成之后调用。 ( 译注:也就是说当每个输入属性的值都被触发了一次 ngOnChanges 之后才会调用 ngOnInit ,此时所有输入属性都已经有了正确的初始绑定值 )

OnInit

指令和组件

ngDoCheck

在每个 Angular 变更检测周期中调用。

DoCheck

指令和组件

ngAfterContentInit

当把内容投影进组件之后调用。

AfterContentInit

组件

ngAfterContentChecked

每次完成被投影组件内容的变更检测之后调用。

AfterContentChecked

组件

ngAfterViewInit

初始化完组件视图及其子视图之后调用。

after initializing the component's views and child views.

AfterViewInit

组件

ngAfterViewChecked

每次做完组件视图和子视图的变更检测之后调用。

AfterViewChecked

组件

ngOnDestroy

当 Angular 每次销毁指令 / 组件之前调用。

OnDestroy

指令和组件

3. 示例

我们用一个示例展示一些常用的生命周期函数的用法,主要包括ngOnChanges,ngOnInit,ngDoCheck,ngOnDestroy,实现的示例代码如下:

birthday组件中实现了对应的生命周期函数,并在App组件中调用

import { Component, Input, OnChanges, OnInit, DoCheck, OnDestroy } from '@angular/core';

@Component({

moduleId: 'birthday',

selector: 'birthday',

template: `

<h5>your birthday is {{birthday}}</h5>

`,

})

export class BirthdayComponent implements OnChanges, OnInit, DoCheck, OnDestroy {

@Input()

birthday;

ngOnChanges(changes) {

console.log('ngOnChanges');

}

ngOnInit() {

console.log('ngOnInit');

}

ngDoCheck() {

console.log('ngDoCheck');

}

ngOnDestroy() {

console.log('ngOnDestroy');

}

}

@Component({

moduleId: 'app',

selector: 'app',

template: `

<birthday [birthday]="birthday"></birthday>

`,

directives: [BirthdayComponent]

})

export class AppComponent {

birthday: Date = new Date(2012, 10, 10);

}

在Chrome中运行,得到的结果如下,可以清楚的看到按照ngOnChanges,ngOnInit,ngDoCheck的顺序执行,当组件销毁时会调用ngOnDestroy。

Angular2 组件生命周期的更多相关文章

  1. angular2系列教程(五)Structural directives、再谈组件生命周期

    今天,我们要讲的是structural directives和组件生命周期这两个知识点.structural directives顾名思义就是改变dom结构的指令.著名的内建结构指令有 ngIf, n ...

  2. [React] 多组件生命周期转换关系

    前段时间一直在基于React做开发,最近得空做一些总结,防止以后踩坑. 言归正传,React生命周期是React组件运行的基础,本文主要是归纳多组件平行.嵌套时,生命周期转换关系. 生命周期 Reac ...

  3. 【转】Tomcat组件生命周期管理

    Tomcat组件生命周期管理 Tomcat中Server,Service,Connector,Engine,Host,Context,它们都实现了org.apache.catalina.Lifecyc ...

  4. Castle IOC容器组件生命周期管理

    主要内容 1.生命处理方式 2.自定义生命处理方式 3.生命周期处理 一.生命处理方式 我们通常创建一个组件的实例使用new关键字,这样每次创建出来的都是一个新的实例,如果想要组件只有一个实例,我们会 ...

  5. Android组件生命周期(二)

    引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  6. Android组件生命周期(一)

    引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  7. vue父子组件生命周期执行顺序

    之前写了vue的生命周期,本以为明白了vue实例在创建到显示在页面上以及销毁等一系列过程,以及各个生命周期的特点.然而今天被问到父子组件生命周期执行顺序的时候一头雾水,根本不知道怎么回事.然后写了一段 ...

  8. React.js 小书 Lesson20 - 更新阶段的组件生命周期

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson20 转载请注明出处,保留原文链接和作者信息. 从之前的章节我们了解到,组件的挂载指的是将组件 ...

  9. Vue父子组件生命周期执行顺序及钩子函数的个人理解

    先附一张官网上的vue实例的生命周期图,每个Vue实例在被创建的时候都需要经过一系列的初始化过程,例如需要设置数据监听,编译模板,将实例挂载到DOM并在数据变化时更新DOM等.同时在这个过程中也会运行 ...

随机推荐

  1. Maven的pom报maven-surefire-plugin:pom:2.12.4

    新建Maven项目,报错: Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from htt ...

  2. jQuery中的100个技巧

      1.当document文档就绪时执行JavaScript代码. 我们为什么使用jQuery库呢?原因之一就在于我们可以使jQuery代码在各种不同的浏览器和存在bug的浏览器上完美运行. < ...

  3. hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images, 本例子主要是使用HTML5 的File API,建立一個可存取到该file的url, 一个空的img标签,ID为img0,把 ...

  4. 我的博客CSS

    这个是按照custom标准模板来做的,博客园已经有模版了,有些细节不是很好,这个是源CSS,喜欢的可以自由DIY,完善更好. @charset "utf-8"; /* CSS Do ...

  5. 关于repaint(重绘)和reflow( 回流)

    repaint就是重绘,reflow就是回流.repaint主要是针对某一个DOM元素进行的重绘,reflow则是回流,针对整个页面的重排 严重性: 在性能优先的前提下,性能消耗 reflow大于re ...

  6. 自己封装的常用NPOI文件导出源码

    示例: 1. 2.示例2 源码下载地址:https://github.com/aa1356889/NPOICode

  7. 【Beta】Scrum09

    Info 考试周,暂停工作 时间:2016.12.26 21:35 时长:20min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 NXT:2016.12.31 21:30 Task Rep ...

  8. IT这一行,如可高速下载国外资源之迅雷设置免费SSH代理下载国外资源

    本文转自SUN'S BLOG 原文地址:IT这一行,如可高速下载国外资源之迅雷 我们这些做IT这一行的人,经常,下载一些国外的一些资源,可是让人蛋碎的是,往往这些资源下载都慢的像蜗牛,真的让人无法忍受 ...

  9. AVA正则表达式4种常用功能

    正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC";  Str ...

  10. c# .net获取随机字符串!

    public string getStr(bool b,int n)//b:是否有复杂字符,n:生成的字符串长度 { string str = "0123456789abcdefghijkl ...