浅谈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 相关文章推荐
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
Nov 25 Javascript
javascript面向对象编程代码
Dec 19 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
浅谈javascript对象模型和function对象
Dec 26 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
angular使用bootstrap方法手动启动的实例代码
Jul 18 Javascript
本地存储localStorage用法详解
Jul 31 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 Javascript
解决vue-router 嵌套路由没反应的问题
Sep 22 Javascript
JS常用跨域方法实现原理解析
Dec 09 Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 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
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
php制作简单模版引擎
2016/04/07 PHP
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
js切换div css注意的细节
2012/12/10 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
Python 登录网站详解及实例
2017/04/11 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
如何利用python发送邮件
2020/09/26 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
C语言面试题
2015/10/30 面试题
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
求职简历中的自我评价分享
2013/12/08 职场文书
数控专业自荐书范文
2014/03/16 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
岗位职责说明书模板
2014/07/30 职场文书
暂住证证明
2015/06/19 职场文书
小学运动会通讯稿
2015/07/18 职场文书
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL