当前位置: 首页 > news >正文

关于angular中的生命周期函数

生命周期函数,也叫生命周期钩子。

Angular的每个组件(包括根组件和子组件)都存在一个生命周期,从创建、更新、到销毁,Angular提供组件生命周期钩子函数,

组件的生命周期从实例化组件类并渲染组件视图及其子视图开始,到Angular销毁组件实例并从DOM中移除它渲染的模板时生命周期结束.

constructor()

constructor并不是生命周期函数,但是每个Angular组件都会有一个constructor函数,当应用通过调用构造函数来实例化一个组件或者指令时,组件的生命周期就开始了,Angular就会在生命周期中适当的时机调用对应的生命周期函数。

Angular官方文档中并不推荐开发者在构造函数中执行除了依赖注入之外的其他操作。

ngOnChanges()

首次调用一定会发生在ngOnInit()方法之前
当组件中有@Input() xxx属性,并且它的值发生变化时才会调用,否则不会调用。
!!!当@Input() xxx输入属性为一个对象时,只有对象的属性值发生变化时也不会调用NGOnChanges函数,只有当对象的引用发生变化时才会触发

ngOnChanges(changes: SimpleChanges){for(const propName in changes){const chng = changes[propName];const cur = JSON.stringify(chng.currentValue);const prev = JSON.stringify(chng.priviousValue);this.changeLog.push(`${propName}: currentValue = ${cur}, previousValue = ${prev}`);}
}
// 上段代码中对应的SimpleChanges
interface SimpleChanges {__index (propName: string): SimpleChange
}
// 上段代码中对应的SimpleChange
class SimpleChange {constructor(previousValue: any, currentValue: any, firstChange: boolean);previousValue: any;currentValue: any;firstChange: boolean;isFirstChange(): boolean; // 检测新值是否是首次赋值,返回一个boolean类型是结果
}

上面代码是Angular文档中演示ngOnChanges钩子的一段代码,ngOnChanges函数接受了一个SimpleChanges对象,并把每个发生变化的属性名映射到这个对象。

ngOnInit()

用于初始化组件、指令。通常在ngOnInit函数中做一些初始化的工作。

1、只调用一次
2、在第一轮ngOnChanges函数调用完成之后再调用。(组件中所有的@Input() 属性的值都触发过一次NGOnChanges函数之后才会调用ngOnInit函数)。
3、如果组件中没有输入属性,不执行ngOnChanges函数也会触发ngOnInit函数

ngDoCheck()

用于变更检测,紧跟在每次变更检测时的ngOnChanges和首次执行的ngOnInit后面调用。当浏览器中的异步事件触发检测机制时,检测模板绑定属性,如果有改变则进行响应更新。

ngAfterContentinit()

当Angular把外部内容投影金组件视图或者指令所在的视图之后调用(第一次调用ngDoCheck后调用,并且只调用一次)

ngAfterContentChecked()

当Angular检查完贝投影到组件或者指令中的内容之后调用(ngAfterContentInit和每次ngDoCheck之后调用)

ngAfterViewInit()

当Angular初始化完成组件视图及其子视图或者包含该指令的视图后调用。

开发中如果需要在js代码中操控DOM元素,我一般会在这个函数中获取对应的DOM节点

ngAfterViewChecked()

当Angular完成组件视图和子视图的变更检测之后调用

ngOnDestroy()

当Angular每次销毁指令或组件时调用
ngOnDestroy函数中的逻辑,一定会在Angular销毁该指令之前执行。在开发中这个地方一般会用来释放资源避免内存泄漏。

比如:

  • 取消电鱼可观察对象和DOM事件
  • 停止interval计时器
  • 反注册该指令在全局或应用服务中注册过的所有回调
  • 通知用用的其他部分,该组件即将销毁

相关文章:

关于angular中的生命周期函数

生命周期函数,也叫生命周期钩子。 Angular的每个组件(包括根组件和子组件)都存在一个生命周期,从创建、更新、到销毁,Angular提供组件生命周期钩子函数, 组件的生命周期从实例化组件类并渲染组件视图及其…...

【拼图】拼图游戏-微信小程序开发流程详解

还记得小时候玩过的经典拼图游戏吗,上小学时,在路边摊用买个玩具,是一个正方形盒子形状,里面装的是图片分割成的很多块,还差一块,怎么描述好呢,和魔方玩具差不多,有没有听说叫二维的…...

第六章 opengl之光照(颜色)

OpenGL光照颜色创建一个光照场景光照 颜色 颜色由RGB组成,分别是红色,绿色,蓝色。举例定义一个颜色向量: glm::vec3 coral(1.0f, 0.5f, 0.31f);而在现实中,人眼看到的是 物体反射后的颜色,也就是说不能被…...

C语言-基础了解-19-C位域

C位域 一、C位域 如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下: struct {unsigned int widthValidated;unsigned int heightValidated; } status;这种结构需要 8 字节的内存空间,但在实际上,在每个变…...

MapReduce全排序和二次排序

排序是MapReduce框架中最重要的操作之一。MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。默认排序是按照字典顺序排序,且实现该排序的方法是快速排序。对于MapTask…...

【Vue3】封装数字框组件

数量选择组件-基本结构 &#xff08;1&#xff09;准备基本结构 <script lang"ts" setup name"Numbox"> // </script> <template><div class"numbox"><div class"label">数量</div><div cla…...

C++-简述strcpy、sprintf 和 memcpy 的区别

回答如下&#xff1a; strcpy 函数&#xff1a;用于将一个字符串&#xff08;以 NULL 结尾&#xff09;从源地址复制到目标地址。函数原型为 char* strcpy(char* destination, const char* source)。需要注意的是&#xff0c;该函数会复制整个字符串&#xff0c;包括 NULL 终止…...

用CPU大法忽悠ChatGPT写前端,油猴子工具库+1

文章目录用CPU大法忽悠ChatGPT写前端&#xff0c;油猴子工具库1源起对话1. 作为一名天才js程序员&#xff0c;开发一个油猴子脚本&#xff0c;实现所有浏览器网页的自动下滑功能&#xff0c;每一个步骤都加上中文注释2. 加一个按钮&#xff0c;只有我点击了按钮才会开始自动下滑…...

初识虚拟DOM渲染器

初识虚拟DOM渲染器什么是虚拟DOM什么是渲染器渲染器的实现组件是什么什么是虚拟DOM 首先简单说一下什么是虚拟DOM&#xff0c;虚拟DOM就是一个描述真实DOM的JS对象 例如&#xff1a; 真实的DOM元素 <div onClick"alert(click me)">click me</div>可以…...

工作日志day03

同时构建静态和动态库 //如果用这种方式&#xff0c;只会构建一个动态库&#xff0c;虽然静态库的后缀是.a ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC}) //修改静态库的名字&#xff0c;这样是可以的&#xff0c;但是我们往往希望他…...

【数据挖掘与商务智能分析】第三章 线性回归模型

一元线性回归 一元线性回归的代码实现 1. 绘制散点图 import matplotlib.pyplot as plt X = [[1], [2], [4], [5]] Y...

iOS开发之UIStackView基本运用

UIStackView UIStackView是基于自动布局AutoLayout&#xff0c;创建可以动态适应设备方向、屏幕尺寸和可用空间的任何变化的用户界面。UIStackView管理其ArrangedSubview属性中所有视图的布局。这些视图根据它们在数组中的顺序沿堆栈视图的轴排列。由axis, distribution, align…...

【java】为什么 main 方法是 public static void ?

main 方法是我们学习Java编程语言时知道的第一个方法&#xff0c;你是否曾经想过为什么 main 方法是 public、static、void 的。当然&#xff0c;很多人首先学的是C和C&#xff0c;但是在Java中main方法与前者有些细微的不同&#xff0c;它不会返回任何值&#xff0c;为什么 ma…...

最简单的线性回归模型-标量

首先考虑yyy为标量&#xff0c;www为标量的情况&#xff0c;那么我们的线性函数为ywxbywxbywxb。每批输入的量batch size 为111&#xff0c;每批输入的xxx为一个标量&#xff0c;设为x∗x^*x∗&#xff0c;标签yyy同样为一个标量&#xff0c;设为y∗y^*y∗。因此每批训练的损失…...

k8s-Kubernetes集群升级

文章目录前言一、集群升级1.部署cri-docker &#xff08;所有集群节点&#xff09;2.升级master节点3.升级worker节点前言 一、集群升级 https://v1-24.docs.kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/ 1.部署cri-docker &#xff08;所有…...

Linux25 -- 监听队列链接上限测试、命令uname、ulimit

一、监听队列链接上限测试 1、res listen(sockfd,5); //创建监听队列res listen(sockfd,5);不懂版本有不同的限制&#xff0c;2.6早期版本有限制为128&#xff0c;超过默认为128&#xff0c;可使用uname -a 查看版本 2、测试将链接数到达上限&#xff0c; 方法&#xff1…...

idea:地址被占用

问题启动idea报&#xff1a;java.net.BindException: Address already in use: bind&#xff0c;具体截图如下&#xff1a;解决步骤1、首先想到的是改idea端口&#xff0c;但按网上方法试下了几个4位数和5位数的端口&#xff0c;没啥作用2、根据idea抛异常的弹出框提示&#xf…...

JavaScript常用小技巧(js优化)

JavaScript常用小技巧&#xff08;js优化&#xff09;常见JS操作1、解构交换两数2、短路赋值3、if 判断优化4、 switch 判断优化6、动态正则匹配Number1、幂运算2、安全计算String1、反转字符串、判断是否回文数2、数组求和3、初始化二维数组Object1、对象遍历2、冻结对象3、解…...

【项目实战】MySQL 5.7中的关键字与保留字详解

一、什么是关键字和保留字 关键字是指在SQL中有意义的字。 某些关键字&#xff08;例如SELECT&#xff0c;DELETE或BIGINT&#xff09;是保留的&#xff0c;需要特殊处理才能用作表和列名称等标识符。 这一点对于内置函数的名称也适用。 二、如何使用关键字和保留字 非保留关…...

Git图解-常用命令操作

目录 一、前言 二、初始化仓库 三、添加文件 四、Git 流程全景图 五、Git工作流程 六、工作区和暂存区 七、查看文件状态 八、查看提交日志 九、查看差异 十、版本回退 十一、管理修改 十二、修改撤销 十三、删除文件 十四、分支管理 十五、项目分支操作 十六、…...

LeetCode096不同的二叉搜索树(相关话题:卡特兰数)

目录 题目描述 解题思路 代码实现 进出栈序列理解卡特兰数分析策略 相关知识 参考文章 题目描述 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; …...

软件测试7

一 CS和BS软件架构 CS&#xff1a;客户端-服务器端&#xff0c;BS&#xff1a;浏览器端-服务器端 区别总结&#xff1a; 1.效率&#xff1a;c/s效率高&#xff0c;某些内容已经安装在系统中了&#xff0c;b/s每次都要加载最新的数据 2.升级&#xff1a;b/s无缝升级&#xff0c…...

12 结构:如何系统设计框架的整体目录?

到现在&#xff0c;我们已经将 Gin 集成到框架 hade 中&#xff0c;同时又引入了服务容器和服务提供者&#xff0c;明确框架的核心思想是面向服务编程&#xff0c;一切皆服务&#xff0c;所有服务都是基于协议。后续也会以服务的形式&#xff0c;封装一个个的服务&#xff0c;让…...

假如你知道这样的MySQL性能优化

1. 为查询缓存优化你的查询 大多数的 MySQL 服务器都开启了查询缓存。这是提高性最有效的方法之 一&#xff0c;而且这是被 MySQL 的数据库引擎处理的。当有很多相同的查询被执行了多次的时候&#xff0c;这些查询结果会被放到一个缓存中&#xff0c;这样&#xff0c;后续的相同…...

79、ClimateNeRF: Physically-based Neural Rendering for Extreme Climate Synthesis

简介主页物理模拟可以很好地预测天气影响。神经辐射场产生SOTA场景模型。ClimateNeRF 允许我们渲染真实的天气效果&#xff0c;包括雾霾、雪和洪水 &#xff0c;结果可以通过有物理意义的变量来控制&#xff0c;比如水位 &#xff0c;这允许人们可视化气候变化的结果将对他们产…...

前端面试题(一)

目录 前言 一、css3实现布局的方式有哪些&#xff1f; 1.flex布局 2.grid布局 二、jquery的扩展机制&#xff1f; 三、jquery动画和css实现动画的本质区别&#xff1f; 四、不使用css的动画&#xff0c;如何实现盒子从左到右移动&#xff1f; 五、使用过的框架&#xf…...

Java基础常见面试题(七)

序列化和反序列化 Java序列化与反序列化是什么&#xff1f; Java序列化是指把Java对象转换为字节序列的过程&#xff0c;而Java反序列化是指把字节序列恢复为Java对象的过程。 序列化&#xff1a; 序列化是把对象转换成有序字节流&#xff0c;以便在网络上传输或者保存在本地…...

【springmvc】报文信息转换器

HttpMessageConverter HttpMessageConverter&#xff0c;报文信息转换器&#xff0c;将请求报文转换为Java对象&#xff0c;或将Java对象转换为响应报文 HttpMessageConverter提供了两个注解和两个类型&#xff1a; RequestBody&#xff0c; ResponseBody&#xff0c; Reques…...

3.5知识点复习

extern&#xff1a;表示声明。 没有内存空间。 不能提升。const&#xff1a;限定一个变量为只读变量。volatile&#xff1a;防止编译器优化代码。volatile int flg 0; register&#xff1a;定义一个寄存器变量。没有内存地址。register int a 10;字符串&#xff1a;C语言中&a…...

湖南中创教育PMP分享项目经理有哪些优势?

项目经理拥有超强的计划能力&#xff1b;具备大局意识&#xff1b;沟通能力特别强&#xff1b;具备更大的灵活性和反应能力以及总结汇报能力 1、超强的计划能力 项目经理几乎无时无刻都在做计划&#xff0c;因此也就更擅长做计划。 项目管理要抓重点&#xff0c;有主次地处理…...

深圳做营销型网站/免费b站在线观看人数在哪里找到

如前所述&#xff0c;最好让所有代码找到问题所在 . 我想你没有在处理设置中添加函数“bufferUntil()”&#xff0c;所以每次串口收到一个值时&#xff0c;它只显示它 . 我可以为你提出一个解决方案&#xff0c;它不是唯一的解决方案&#xff0c;但似乎有效 .在您的Arduino代码…...

怎么做应援网站/seo流量优化

1、使用uni-swiper-dot 轮播图指示点 地址&#xff1a;插件地址. 2、使用HBuilderX导入组件 3、按照官方文档使用&#xff0c; 4、文档中并没有说自动轮播&#xff0c;添加属性autoplay"true"就可以了。解决如下 <swiper class"swiper-box" change&q…...

成都网站制作汕头/seo比较好的公司

数据结构实验之栈与队列五&#xff1a;下一较大值&#xff08;一&#xff09; Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 对于包含n&#xff08;1<n<1000&#xff09;个整数的序列&#xff0c;对于序列中的每一元素…...

网站自己维护/十大网络推广公司

File_operations结构体 结构体file_operations在头文件 linux/fs.h中定义.在驱动程序中&#xff0c;用来存储对设备进行各种操作的函数的指针&#xff0c;可以看做是这些函数与系统调用的对应关系表。系统调用发生时&#xff0c;系统会读取file_operation中相应的函数指针&…...

做网站开发的笔记本配置/平台优化

string &#xff1a;关键字 String &#xff1a;类 可以认为string 是String的别名&#xff0c;在生成的IL中&#xff0c;都是当做String&#xff0c;类似的还有 object 与Object&#xff0c;int 与 Int32 转载于:https://www.cnblogs.com/nzbbody/archive/2012/01/06/2314170.…...

wordpress 3.8页面伪静态化 html/就业培训机构有哪些

本篇文章将对一些常见的python面试题目进行整理&#xff0c;并做简要的回答&#xff0c;可供参考&#xff0c;如果你有更好更全面的答案&#xff0c;那么请在评论区评论&#xff0c;一起交流学习^0^ 1. 列举 Python2 和 Python3 的区别? 答&#xff1a; 默认编码不同&#xff…...