浅谈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下数值型比较难点说明
Jun 07 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
Aug 26 Javascript
Javasipt:操作radio标签详解
Dec 30 Javascript
javascript动态创建链接的方法
May 13 Javascript
jQuery获取cookie值及删除cookie用法实例
Apr 15 Javascript
JS实现HTML表格排序功能
Aug 05 Javascript
node.js中实现kindEditor图片上传功能的方法教程
Apr 26 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
Oct 30 Javascript
JS实现音乐钢琴特效
Jan 06 Javascript
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
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 连接mssql数据库 初学php笔记
2010/03/01 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
js函数般调用正则
2008/04/08 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
python django集成cas验证系统
2014/07/14 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
python3爬虫之设计签名小程序
2018/06/19 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
银行实习鉴定
2013/12/13 职场文书
大学生村官心得体会范文
2014/01/04 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
颐和园的导游词
2015/01/30 职场文书
A22国内电台短波广播频率表
2022/05/10 无线电