浅谈angular4生命周期钩子


Posted in Javascript onSeptember 05, 2017

理解

Angular提供了生命周期钩子,把这些关键生命时刻暴露出来,赋予我们在它们发生时采取行动的能力。可以将钩子函数理解为在合适的时候做合适的事情。

钩子函数

ng4主要提供了8个钩子函数:

1、ngOnchanges

@input属性(输入属性)发生变化时,会调用。非此属性,不会调用。

当输入属性为对象时,当对象的属性值发生变化时,不会调用,当对象的引用变化时会触发。

先于ngOnInit调用。

2、ngOnInit

只执行一次,dom操作可放在其中。(最常用)

3、NgDocheck

每次发生变更检测时会被调用

ngDoCheck() 是Angular中的变更检测机制.它由 zone.js 来实现的.其行为是只要你的Angular中的某个组件发生异步事件.就会检查整个组件树,以保证组件属性的变化或页面的变化是同步的.所以 ngDoCheck() 的触发相当频繁的.并且是我们无法预料到的.也许我们在页面上的一个无意识操作,就会触发几个甚至几十个的 ngDoCheck() 生命周期钩子.

4、ngAfterContentInit

在组件内容初始化之后调用

5、ngAfterContentChecked

内容投影:父组件写在子标签之间的内容会被渲染到子模板的ng-content中去,类似vue的slot

组件及子组件每次检查内容时调用

当父子组件都有该钩子时,父组件先执行。

6、ngAfterViewInt

组件相应的视图初始化之后调用

7、ngAfterViewChecked

组件及子组件每次检查视图时调用

当父子组件都有该钩子时,子组件先执行。

ngAfterViewChecked与ngAfterViewInt中不允许修改绑定的属性(@input属性),否则抛出异常

8、ngOnDestory

销毁,事件解绑。

3.执行顺序

父组件:

组件模板

<div class="panel-body">
 <input type="text" [(ngModel)]="name">
 {{name}}
  <son [name]="name"></son>
</div>

组件

@Component({
 selector: 'father',
 templateUrl: './father.component.html',
 styleUrls: ['./father.component.scss']
})
export class FatherComponent implements OnInit {
 public name:string;
 constructor() { }
 ngOnInit() {
 console.log("父组件ngOninit");
 }
 ngOnchanges(){
 console.log("父组件ngonchanges");
 }
 ngDoCheck (){
 console.log("父组件ngDocheck")
 }
 ngAfterContentInit(){
 console.log("父组件ngAfterContentInit")
 }
 ngAfterContentChecked(){
 console.log("父组件ngAfterContentChecked")
 }
 ngAfterViewInit(){
 console.log("父组件ngAfterViewInit")
 }
 ngAfterViewChecked(){
 console.log("父组件ngAfterViewChecked")
 }
}

子组件

@Component({
 selector: 'son',
 templateUrl: './son.component.html',
 styleUrls: ['./son.component.scss']
})
export class SonComponent implements OnInit {
 @Input() name:string;
 constructor() { }

 ngOnInit() {
 console.log("子组件ngOninit");
 }
 ngOnChanges (){
 console.log("子组件ngonchanges");
 }
 ngDoCheck (){
 console.log("子组件ngDocheck")
 }
 ngAfterContentInit(){
 console.log("子组件ngAfterContentInit")
 }
 ngAfterContentChecked(){
 console.log("子组件ngAfterContentChecked")
 }
 ngAfterViewInit(){
 console.log("子组件ngAfterViewInit")
 }
 ngAfterViewChecked(){
 console.log("子组件ngAfterViewChecked")
 }
 
}

看打印结果:

浅谈angular4生命周期钩子

当在父组件的input中输入内容时,会打印如下结果:

浅谈angular4生命周期钩子

看到有人说只有当使用内容投影时才会调用ngAfterConentChecked,当上面的里面的代码很显然是没用ng-content的,不知道该怎么解释这个ngAfterConentChecked。

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

Javascript 相关文章推荐
flash javascript之间的通讯方法小结
Dec 20 Javascript
javascript 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
js当一个变量为函数时 应该注意的一点细节小结
Dec 29 Javascript
JavaScript通过正则表达式实现表单验证电话号码
Mar 07 Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 Javascript
JS动态修改iframe内嵌网页地址的方法
Apr 01 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
Bootstrap源码解读排版(1)
Dec 23 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
基于JavaScript实现轮播图效果
Jan 02 Javascript
vue修饰符.capture和.self的区别
Apr 22 Vue.js
TypeScript 内置高级类型编程示例
Sep 23 Javascript
webpack踩坑之路图片的路径与打包
Sep 05 #Javascript
js实现鼠标跟随运动效果
Aug 02 #Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
Sep 05 #Javascript
javascript观察者模式实现自动刷新效果
Sep 05 #Javascript
js使用generator函数同步执行ajax任务
Sep 05 #Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 #Javascript
详解Vue2.0 事件派发与接收
Sep 05 #Javascript
You might like
ASP知识讲座四
2006/10/09 PHP
mysql 全文搜索 技巧
2007/04/27 PHP
php include,include_once,require,require_once
2008/09/05 PHP
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
php中错误处理操作实例分析
2019/08/23 PHP
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
javascript实现画板功能
2020/04/12 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
行政总经理岗位职责
2013/12/05 职场文书
社区消防工作实施方案
2014/03/21 职场文书
10的分与合教学反思
2014/04/30 职场文书
治超工作实施方案
2014/05/04 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
员工加薪申请报告
2015/05/15 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
政协常委会议主持词
2015/07/03 职场文书
公司新员工欢迎词
2015/09/30 职场文书