浅谈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中window.event事件用法详解
Dec 11 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
Jul 09 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
Jun 23 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
vue-resourse将json数据输出实例
Mar 08 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
Mar 10 Javascript
js实现一键复制功能
Mar 16 Javascript
Bootstrap响应式表格详解
May 23 Javascript
JS返回页面时自动回滚到历史浏览位置
Sep 26 Javascript
微信小程序实现顶部导航特效
Jan 28 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
php_pdo 预处理语句详解
2016/11/21 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
医学院校毕业生自荐信范文
2014/01/01 职场文书
单位在职证明范本
2014/01/09 职场文书
办公室文员工作职责
2014/01/31 职场文书
初中学校军训方案
2014/05/09 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
社区安全温馨提示语
2015/07/14 职场文书