浅谈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 相关文章推荐
写的htc的数据表格
Jan 20 Javascript
javascript 关于# 和 void的区别分析
Oct 26 Javascript
input 输入框内的输入事件详细分析
Mar 17 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
Mar 25 Javascript
深入剖析JavaScript面向对象编程
Jul 12 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
JavaScript生成验证码并实现验证功能
Sep 24 Javascript
bootstrap fileinput 上传插件的基础使用
Feb 17 Javascript
vue实现文件上传功能
Aug 13 Javascript
iview的table组件自带的过滤器实现
Jul 12 Javascript
Vue快速实现通用表单验证的方法
Feb 24 Javascript
vue项目查看vue版本及cli版本的实现方式
Oct 24 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学习之PHP运算符
2006/10/09 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
高校毕业生自我鉴定
2013/10/27 职场文书
白莲教口号
2014/06/18 职场文书
课外活动总结范文
2014/07/09 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
民间借贷借条范本
2015/05/25 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android