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


Posted in Javascript onAugust 12, 2017

本文介绍了浅谈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。

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

测试生命周期顺序的代码

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);

输出结果

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

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

Javascript 相关文章推荐
Javascript Global对象
Aug 13 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
Dec 03 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
js基本算法:冒泡排序,二分查找的简单实例
Oct 08 Javascript
微信小程序-详解数据缓存
Nov 24 Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
Angular4学习笔记之根模块与Ng模块
Sep 09 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
Jan 26 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
Aug 02 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
了解JavaScript函数中的默认参数
May 30 Javascript
Node.js pipe实现源码解析
Aug 12 #Javascript
vue实现移动端图片裁剪上传功能
Aug 18 #Javascript
JavaScript实现图片切换效果
Aug 12 #Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 #Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 #Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 #Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 #Javascript
You might like
PHP分页显示制作详细讲解
2006/10/09 PHP
PHP图片上传代码
2013/11/04 PHP
php创建多级目录的方法
2015/03/24 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
JS Timing
2007/04/21 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
多个应用共存的Django配置方法
2018/05/30 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python如何写try语句
2020/07/14 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
致400米运动员广播稿
2014/02/07 职场文书
大学生作弊检讨书
2014/09/11 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
英文版辞职信
2015/02/28 职场文书
任命书标准格式
2015/03/02 职场文书
建党伟业的观后感
2015/06/01 职场文书
《风筝》教学反思
2016/02/23 职场文书
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
JavaScript设计模式之原型模式详情
2022/06/21 Javascript