浅谈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 纠正 cleanWhitespace函数
Mar 11 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
Angular5中提取公共组件之radio list的实例代码
Jul 10 Javascript
如何使用less实现随机下雪动画详解
Jan 02 Javascript
从0到1搭建element后台框架优化篇(打包优化)
May 12 Javascript
小程序云开发如何实现图片上传及发表文字
May 17 Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 Javascript
vue路由 遍历生成复数router-link的例子
Oct 30 Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 Javascript
JS实现简易贪吃蛇游戏
Aug 24 Javascript
vue项目打包后请求地址错误/打包后跨域操作
Nov 04 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基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
Jquery性能优化详解
2014/05/15 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python实现多进程代码示例
2018/10/31 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python绘制动态水球图过程详解
2020/06/03 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
python实现视频压缩功能
2020/12/18 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
销售总监工作职责
2013/11/21 职场文书
高三英语教学反思
2014/01/13 职场文书
环保宣传标语
2014/06/12 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
安全学习心得体会范文
2016/01/18 职场文书
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis