浅谈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 相关文章推荐
Hutia 的 JS 代码集
Oct 24 Javascript
学习ExtJS form布局
Oct 08 Javascript
现如今最流行的JavaScript代码规范
Mar 08 Javascript
JavaScript操作URL的相关内容集锦
Oct 29 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
Apr 20 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
vue实现图片上传到后台
Jun 29 Javascript
js实现滑动滑块验证登录
Jul 24 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
深入浅出分析javaScript中this用法
2015/05/09 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
Python中的变量和作用域详解
2016/07/13 Python
简单谈谈Python中的闭包
2016/11/30 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python求解汉诺塔游戏
2020/07/09 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
中专生自我鉴定范文
2013/12/19 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
浅谈Python数学建模之数据导入
2021/06/23 Python
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL