浅谈angular2 组件的生命周期钩子

 更新时间:2017年08月12日 11:46:12   作者:肥飛猫的专栏  
本篇文章主要介绍了浅谈angular2 组件的生命周期钩子,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了浅谈angular2 组件的生命周期钩子,分享给大家,具体如下:

按照生命周期执行的先后顺序,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

指令和组件

生命周期顺序简写

在Angular通过构造函数创建组件/指令时,它调用这些生命周期钩子方法的顺序是:

  • ngOnChanges:在ngOnInit之前,当数据绑定输入属性的值发生变化时。
  • ngOnInit:在第一次ngOnChanges之后。
  • ngDoCheck:每次Angular变化检测时。
  • ngAfterContentInit:在外部内容放到组件内之后。
  • ngAfterContentChecked:在放到组件内的外部内容每次检查之后。
  • ngAfterViewInit:在初始化组件视图和子视图之后。
  • ngAfterViewChecked:在妹子组件视图和子视图检查之后。
  • ngOnDestroy:在Angular销毁组件/指令之前。

除此之外,一些组件还提供了自己的生命周期钩子。例如router有routerOnActivate。

测试生命周期顺序的代码

import {Component} from '@angular/core';
import {bootstrap} from '@angular/platform-browser-dynamic';

@Component({
 selector: 'panel',
 inputs: ['title', 'caption'],
 template: '<ng-content></ng-content>'
})
class Panel {
 // 组件输入属性值发生改变(首次调用一定会发生在 ngOnInit之前。)
 ngOnChanges(changes) {
  console.log('On changes', changes);
 }
 // 组件初始化完成(在第一轮 ngOnChanges 完成之后调用。 ( 译注:也就是说当每个输入属性的值都被触发了一次 ngOnChanges 之后才会调用 ngOnInit ,此时所有输入属性都已经有了正确的初始绑定值 ))
 ngOnInit() {
  console.log('Initialized');
  console.warn('OnChanges和DoCheck钩子不要同时出现,互斥!。本例仅供学习');
 }
 // 脏值检测器被调用后调用
 ngDoCheck() {
  console.log('Do check');
 }
 // 组件销毁之前
 ngOnDestroy() {
  console.log('Destroy');
 }
 // 组件-内容-初始化完成 PS:指的是ContentChild或者Contentchildren
 ngAfterContentInit() {
  console.log('After content init');
 }
 // 组件内容脏检查完成
 ngAfterContentChecked() {
  console.log('After content checked');
 }
 // 组件视图初始化完成 PS:指的是ViewChild或者ViewChildren
 ngAfterViewInit() {
  console.log('After view init');
 }
 // 组件视图脏检查完成之后
 ngAfterViewChecked() {
  console.log('After view checked');
 }
}

@Component({
 selector: 'app',
 template: `
  <button (click)="toggle()">Toggle</button>
  <div *ngIf="counter % 2 == 0">
   <panel caption="Sample caption" title="Sample">Hello world!</panel>
  </div>
 `,
 directives: [Panel]
})
class App {
 counter: number = 0;
 toggle() {
  this.counter += 1;
 }
}

bootstrap(App);

输出结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解AngularJS脏检查机制及$timeout的妙用

    详解AngularJS脏检查机制及$timeout的妙用

    本篇文章主要介绍了详解AngularJS脏检查机制及$timeout的妙用,“脏检查”是Angular中的核心机制之一,它是实现双向绑定、MVVM模式的重要基础,有兴趣的可以了解一下
    2017-06-06
  • Angular刷新当前页面的实现方法

    Angular刷新当前页面的实现方法

    这篇文章主要介绍了Angular刷新当前页面的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 详解Angularjs 如何自定义Img的ng-load 事件

    详解Angularjs 如何自定义Img的ng-load 事件

    本篇文章主要介绍了详解Angularjs 如何自定义Img的ng-load 事件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Angular表格神器ui-grid应用详解

    Angular表格神器ui-grid应用详解

    这篇文章主要为大家详细介绍了Angular表格神器ui-grid应用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • AngularJS实现星星等级评分功能

    AngularJS实现星星等级评分功能

    这篇文章主要为大家详细介绍了AngularJS实现星星等级评分功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 浅析webapp框架AngularUI的demo

    浅析webapp框架AngularUI的demo

    这篇文章主要介绍了浅析webapp框架AngularUI的demo以及对demo的简单修改,需要的朋友可以参考下
    2014-12-12
  • AngularJS 实现JavaScript 动画效果详解

    AngularJS 实现JavaScript 动画效果详解

    本文主要介绍AngularJS 实现 JavaScript 动画的资料,这里整理了详细的资料和简单示例代码,有兴趣的小伙伴可以参考下
    2016-09-09
  • 详解angularJs中关于ng-class的三种使用方式说明

    详解angularJs中关于ng-class的三种使用方式说明

    本篇文章主要介绍了angularJs中关于ng-class的三种使用方式说明,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 使用AngularJS 跨站请求如何解决jsonp请求问题

    使用AngularJS 跨站请求如何解决jsonp请求问题

    这篇文章主要介绍了使用AngularJS 跨站请求如何解决jsonp请求问题,下面通过本文给大家分享解决办法,需要的朋友参考下
    2017-01-01
  • angular4自定义组件详解

    angular4自定义组件详解

    这篇文章主要为大家详细介绍了angular4自定义组件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09

最新评论