GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

Angular 生命周期钩子,让你掌控每个关键时刻

2020 年 1 月 07 日

Angular 生命周期钩子,让你掌控每个关键时刻

生命周期的执行顺序

生命周期顺序简写

在 Angular 通过构造函数创建组件/指令时,它调用这些生命周期钩子方法的顺序是:


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


(2)ngOnInit 在组件初始化的时候调用,只调用一次,在第一次调用 ngOnChanges 之后调用。


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


(4)ngAfterContentInit 在组件内容初始化之后调用,在第一次 ngDoCheck 之后调用,只调用一次。


(5)ngAfterContentChecked 在组件每次检查内容发生变更时调用。在 ngAfterContentInit 和每次 ngDoCheck 之后调用。


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


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


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


Angular 生命周期接口

按照生命周期执行的先后顺序,Angular 生命周期接口如下表所示


(温馨提示:点击图片可查看大图)



生命周期测试

测试代码如下所示


// 未按照生命周期钩子函数执行顺序书写代码,控制台打印出来函数执行顺序并不是按照//代码书写顺序:


(温馨提示:左右滑动可查看全部代码)


import { Component, SimpleChanges, Input } from "@angular/core";@Component({ selector: "app-child", templateUrl: "./app.child.component.html", styleUrls: []})export class ChildComponent  { @Input() name: string; constructor() {   console.log("constructor执行•••"); } ngOnChanges(changes: SimpleChanges) {   console.log("ngOnChages执行了•••"); } ngOnInit() {   console.log("ogOnInit执行了••••"); } ngAfterContentChecked() {   console.log("ngAfterContentChecked执行了•••"); } ngAfterViewInit() {   console.log("ngAfterViewInit执行了••••"); } ngAfterViewChecked() {   console.log("ngAfterViewChecked执行了••••"); } ngOnDestroy() {   console.log("ngOnDestroy执行了••••"); }   ngDoCheck() {   console.log("ngDoCheck执行了••••"); } ngAfterContentInit() {   console.log("ngAfterContentInit执行了•••"); }}
复制代码


(1)初始化加载过程中,未输入改变值时,控制台输出效果如下图:


(温馨提示:点击图片可查看大图)



(2)输入框输入改变值时,控制台输出效果如下图所示:


(温馨提示:点击图片可查看大图)



本转载自 Think 体验设计公众号。


原文链接:https://mp.weixin.qq.com/s/iFs4d7XDcoLA3ZweWMpdwQ


2020 年 1 月 07 日 15:40199

评论

发布
暂无评论
发现更多内容

[翻译]分布式系统的模式-综述

流沙

架构 分布式系统

两数之和

书旅

数据结构 算法 数据结构与算法

Web前端性能优化,应该怎么做?

华为云开发者社区

运维 前端 HTTP js 前端性能优化

可读代码编写炸鸡十 - 保持单纯

多选参数

代码质量 代码 代码优化 可读代码编写 可读代码

troubleshoot之:使用JFR解决内存泄露

程序那些事

Java 内存泄露 性能调优

常见的BI项目问题和解决方案

JackWangGeek

微软BI解决方案的优势

JackWangGeek

推荐Scrum书籍

Bob Jiang

Scrum 敏捷

架构师0期Week10作业2

Nan Jiang

关键绩效指标KPI

JackWangGeek

SSIS主要功能

JackWangGeek

第十周.命题作业

刘璐

数据挖掘

JackWangGeek

架构师训练营第十周总结

邵帅

环信助力OFashion迷橙开辟海外直播带货新通路

DT极客

5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆

华为云开发者社区

5G IoT 通信 华为云 NB-IoT

架构师0期Week10作业1

Nan Jiang

数据仓库

JackWangGeek

有意思:Go函数的闭包

申屠鹏会

go 闭包 函数

区块链跨境承兑商支付系统开发,usdt支付平台搭建

WX13823153201

区块链 数字货币

如何优雅的编写GO程序?

八两

go 优雅 语法

架构师训练营第十周作业

邵帅

什么是死信队列

Java旅途

RabbitMQ

window form自定义控件类型

JackWangGeek

看DLI服务4核心如何提升云服务自动化运维

华为云开发者社区

Serverless 运维 运维自动化 华为云 DLI

如何有效防止sql注入

Java旅途

SSAS查询性能最佳实践

JackWangGeek

Newbe.Claptrap 框架如何实现 Claptrap 的多样性?

newbe36524

容器 微服务 .net core ASP.NET Core

吴桐:数字货币具有稳定的避险性吗

CECBC区块链专委会

区块链 数字货币 链政经济

一文读懂GaussDB(for Mongo)的计算存储分离架构

华为云开发者社区

数据库 mongodb 数据 GaussDB 存储分离

一文熟悉MySQL索引

书旅

MySQL 索引

DNSPod与开源应用专场

DNSPod与开源应用专场

Angular 生命周期钩子,让你掌控每个关键时刻-InfoQ