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 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
JavaScript Date对象使用总结
May 14 Javascript
Javascript倒计时代码
Aug 12 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
jQuery Checkbox 全选 反选的简单实例
Nov 29 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
Apr 24 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
Mar 22 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
Nov 30 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
May 09 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
德生PL330测评
2021/03/02 无线电
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
关于svn冲突的解决方法
2013/06/21 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
js Date概念详细介绍
2013/11/22 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
python的类方法和静态方法
2014/12/13 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
网站美工岗位职责
2014/04/02 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
安全先进班组材料
2014/12/26 职场文书
初中团支书竞选稿
2015/11/21 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android