浅谈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知识点收藏
Feb 22 Javascript
javascript vvorld 在线加密破解方法
Nov 13 Javascript
在jQuery 1.5中使用deferred对象的代码(翻译)
Mar 10 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
Sep 02 Javascript
中止javascript执行的方法
Feb 14 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
Sep 26 Javascript
vue中实现图片压缩 file文件的方法
May 28 Javascript
对vue生命周期的深入理解
Dec 03 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实现上传图片保存到数据库的方法
2015/02/11 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
JS敏感词过滤代码
2016/12/23 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
python3让print输出不换行的方法
2020/08/24 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
毕业生求职自荐信怎么写
2014/01/08 职场文书
教师申诉制度
2014/01/29 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
学生手册评语
2014/05/05 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
公司开业主持词
2015/07/02 职场文书
小学大队长竞选稿
2015/11/20 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
python实现简单的井字棋
2021/05/26 Python
Python一行代码实现自动发邮件功能
2021/05/30 Python
Python函数式编程中itertools模块详解
2021/09/15 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电