浅谈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 相关文章推荐
js取得url地址参数实例
Feb 22 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
js判断当前浏览器类型,判断IE浏览器方法
Jun 02 Javascript
JS的事件绑定深入认识
Jun 26 Javascript
javascript框架设计读书笔记之种子模块
Dec 02 Javascript
jQuery事件委托之Safari
Jul 05 Javascript
ionic2 tabs使用 Modal底部tab弹出框
Dec 30 Javascript
JS实现touch 点击滑动轮播实例代码
Jan 19 Javascript
vue-router 学习快速入门
Mar 01 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
Mar 21 Javascript
axios的拦截请求与响应方法
Aug 11 Javascript
Vue仿微信app页面跳转动画效果
Aug 21 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
关于时间计算的结总
2006/12/06 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
PHP实现微信发红包程序
2015/08/24 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
angularjs指令之绑定策略(@、=、&amp;)
2017/04/13 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
python处理“
2019/06/10 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
日语专业毕业生自荐信
2013/11/11 职场文书
八项规定对照检查材料
2014/08/31 职场文书
员工试用期自我评价
2014/09/18 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
会计岗位职责范本
2015/04/02 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
信用卡催款律师函
2015/05/27 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang