浅谈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 相关文章推荐
JavaScript入门教程(3) js面向对象
Jan 31 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
Oct 17 Javascript
node.js中的fs.open方法使用说明
Dec 17 Javascript
JQuery中的事件及动画用法实例
Jan 26 Javascript
jQuery mobile 移动web(4)
Dec 20 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
jQuery弹出层插件popShow(改进版)用法示例
Jan 23 Javascript
vue中的scope使用详解
Oct 29 Javascript
vue移动端UI框架实现QQ侧边菜单组件
Mar 09 Javascript
JavaScript闭包原理与用法实例分析
Aug 10 Javascript
vue实现表格过滤功能
Sep 27 Javascript
vue3中的组件间通信
Mar 31 Vue.js
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
PHP中for循环语句的几种变型
2006/11/26 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
python drf各类组件的用法和作用
2021/01/12 Python
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
车间工艺员岗位职责
2013/12/09 职场文书
高级编程求职信模板
2014/02/16 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
经济担保书范文
2014/04/02 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
2014年工程工作总结
2014/11/25 职场文书
售后服务承诺函格式
2015/01/21 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
Redis实战高并发之扣减库存项目
2022/04/14 Redis
Python开发五子棋小游戏
2022/05/02 Python