浅谈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 相关文章推荐
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
使用javascript实现页面定时跳转总结篇
Sep 21 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
深入对Vue.js $watch方法的理解
Mar 20 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
Dec 21 Javascript
详解Immutable及 React 中实践
Mar 01 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
vue+express 构建后台管理系统的示例代码
Jul 19 Javascript
vue 解决循环引用组件报错的问题
Sep 06 Javascript
记录vue项目中遇到的一点小问题
May 14 Javascript
微信小程序wxs实现吸顶效果
Jan 08 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
两种php调用Java对象的方法
2006/10/09 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
Javascript操作cookie的函数代码
2012/10/03 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
Python如何实现FTP功能
2020/05/28 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
python openCV自制绘画板
2020/10/27 Python
船舶专业个人求职信范文
2014/01/02 职场文书
求职简历中自我评价
2014/01/28 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
九年级英语教学反思
2016/02/15 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
Python几种酷炫的进度条的方式
2022/04/11 Python