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 相关文章推荐
JQuery SELECT单选模拟jQuery.select.js
Nov 12 Javascript
jquery中的on方法使用介绍
Dec 29 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
Jun 05 Javascript
深入理解javascript构造函数和原型对象
Sep 23 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
JS+CSS实现电子商务网站导航模板效果代码
Sep 10 Javascript
Bootstrap Modal遮罩弹出层代码分享
Nov 21 Javascript
Vue.js父与子组件之间传参示例
Feb 28 Javascript
jQuery简单实现遍历单选框的方法
Mar 06 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
一些可能会用到的Node.js面试题
Jun 15 Javascript
原生JS实现微信通讯录
Jun 18 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实现短域名互转
2013/07/05 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
修复IE9&safari 的sort方法
2011/10/21 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
简单的js计算器实现
2016/10/26 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
Python Deque 模块使用详解
2014/07/04 Python
python更改已存在excel文件的方法
2018/05/03 Python
在django view中给form传入参数的例子
2019/07/19 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
甜品店的创业计划书范文
2014/01/02 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
带薪年假请假条
2014/02/04 职场文书
财务总经理岗位职责
2014/02/16 职场文书
入党推优材料
2014/06/02 职场文书
法定代表人资格证明书
2014/09/11 职场文书
公司2015年终工作总结
2015/05/26 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript