浅谈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 相关文章推荐
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
Jan 11 Javascript
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
Mar 03 Javascript
2014年最火的Node.JS后端框架推荐
Oct 27 Javascript
浅谈jQuery中ajaxPrefilter的应用
Aug 01 Javascript
如何使用Vuex+Vue.js构建单页应用
Oct 27 Javascript
使用webpack打包后的vue项目如何正确运行(express)
Oct 26 Javascript
socket io与vue-cli的结合使用的示例代码
Nov 01 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
Jul 22 Javascript
antd多选下拉框一行展示的实现方式
Oct 31 Javascript
JavaScript实例 ODO List分析
Jan 22 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
各种战术和打法的原创者
2020/03/04 星际争霸
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
phalcon框架使用指南
2016/02/23 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Python压缩和解压缩zip文件
2015/02/14 Python
python daemon守护进程实现
2016/08/27 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
幼儿园保教管理制度
2014/02/03 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
营销计划书范文
2015/01/17 职场文书
应聘教师求职信范文
2015/03/20 职场文书
2016春节家属慰问信
2015/03/25 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
springboot读取nacos配置文件
2022/05/20 Java/Android