Angular2生命周期钩子函数的详细介绍


Posted in Javascript onJuly 10, 2017

Angular每个组件都存在一个生命周期,从创建,变更到销毁。Angular提供组件生命周期钩子,把这些关键时刻暴露出来,赋予在这些关键结点和组件进行交互的能力,掌握生命周期,可以让我们更好的开发Angular应用

概述

每个接口都有唯一的一个钩子方法,它们的名字是由接口名再加上ng前缀构成的。比如,OnInit接口的钩子方法叫做ngOnInit, Angular在创建组件后立刻调用它

Angular2生命周期钩子函数的详细介绍

生命周期执行顺序

ngOnChanges

在有输入属性的情况下才会调用,该方法接受当前和上一属性值的SimpleChanges对象。如果有输入属性,会在ngOnInit之前调用。

ngOnInit

在组件初始化的时候调用,只调用一次,在第一次调用ngOnChanges之后调用

ngDoCheck

在组件定义的属性或方法变更时调用(用于脏值之检测,非常耗性能,因为会把所有的属性和方法都检测一遍),会在ngOnChanges()和ngOnInit()之后

ngAfterContentInit

在组件内容初始化之后调用,在第一次ngDoCheck之后调用,只调用一次

ngAfterContentChecked

在组件每次检查内容放生变更时调用。在ngAfterContentInit和每次ngDoCheck之后调用

ngAfterViewInit

在组件相应的视图初始化之后调用,第一次ngAfterContentChecked之后调用,只调用一次

ngAfterViewChecked

在组件每次检查视图发生变更时调用。ngAfterViewInit和每次ngAfterContentChecked之后调用。

ngOnDestroy

在组件销毁前调用,做一些清理工作,比如退订可观察对象和移除事件处理器,以免导致内存泄漏。

Angular2生命周期钩子函数的详细介绍

上面代码书写是按顺序的,看下面控制台打印

Angular2生命周期钩子函数的详细介绍

现在我们钩子函数的顺序打乱,在看看代码

Angular2生命周期钩子函数的详细介绍

控制台输出跟上面是一样的

Angular2生命周期钩子函数的详细介绍

constructor和ngOnInit

constructor是ES6中class中新增的属性,当class类实例化的时候调用constructor,来初始化类。Angular中的组件就是基于class类实现的,在Angular中,constructor用于注入依赖。

Angular2生命周期钩子函数的详细介绍

ngOnInit是Angular中生命周期的一部分,在constructor后执行。在Angular中用于初始化变量和数据绑定等

Angular2生命周期钩子函数的详细介绍

NgChanges

当我们监听了OnChanges钩子。 一旦检测到该组件(或指令)的输入属性发生了变化,Agular就会调用ngOnChanges()方法

Angular2生命周期钩子函数的详细介绍

效果演示

Angular2生命周期钩子函数的详细介绍

DoCheck

当组件中属性或函数发生变化时DoCheck会执行脏值检测,遍历所有变量

Angular2生命周期钩子函数的详细介绍

效果演示

Angular2生命周期钩子函数的详细介绍

个人学习心得,大神路过,不喜勿喷?,如果代码有错误,欢迎纠正同时也欢迎交流

感谢阅读,希望能帮助到大家,也希望大家多多支持三水点靠木!

Javascript 相关文章推荐
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
Jan 25 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
Jun 21 Javascript
jquery scroll()区分横向纵向滚动条的方法
Apr 04 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
js格式化时间的方法
Dec 18 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
原生js实现回复评论功能
Jan 18 Javascript
原生和jQuery的ajax用法详解
Jan 23 Javascript
微信小程序 获取session_key和openid的实例
Aug 17 Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 Javascript
原生JS实现随机点名项目的实例代码
Apr 30 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
Jul 10 #Javascript
在vue中获取dom元素内容的方法
Jul 10 #Javascript
jQuery实现html table行Tr的复制、删除、计算功能
Jul 10 #jQuery
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 #Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
Jul 10 #Javascript
Javascript调试之console对象——你不知道的一些小技巧
Jul 10 #Javascript
vue实现表格数据的增删改查
Jul 10 #Javascript
You might like
PHP中str_replace函数使用小结
2008/10/11 PHP
php下获取http状态的实现代码
2014/05/09 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
遗体告别仪式主持词
2014/03/20 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
公司节能减排方案
2014/05/16 职场文书
护士年终个人总结
2015/02/13 职场文书
土建施工员岗位职责
2015/04/11 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
美元符号 $
2022/02/17 杂记