首页 > 其他分享 >angular组件的生命周期钩子函数

angular组件的生命周期钩子函数

时间:2023-08-06 23:33:18浏览次数:29  
标签:生命周期 函数 钩子 用途 视图 组件 angular

angular的组件生命周期

​ 上图[4]展示了angular生命周期钩子函数的执行顺序,在此之前,angular会先执行constructor函数。

一、基本说明

1. constructor
  • 用途:初始化组件,设定属性,注入依赖。

  • 说明:构造函数中能读取到本组件内部定义的基本变量和函数的值,但是读不到@ContentChildren@ContentChild@ViewChildren@ViewChild@Input等带修饰符的变量值。通常只在其中注入依赖,不要放入任何特定于组件的页面相关的任务。

2. ngOnChanges
  • 用途:@Input()属性发生变化时调用。

  • 说明:如果 @Input 是个对象,对象里面的数据改变但是引用没有变化是不会触发这个函数。[1]

3. ngOnInit
  • 用途:初始化组件状态,通常用于初始化数据和API调用。[4]此处才能访问到@Input的变量值。
4. ngDoCheck
  • 用途:用户可以自定义变化(click handlers, http requests, route changes…)检测逻辑,用户可以在Angular 无法或不愿意自己检测的变化时增加反应逻辑。

  • 说明:成本非常高,建议仅在Debug时使用。

5. ngAfterContentInit ngAfterContentChecked
  • 用途:用于与组件的投影内容进行交互。

  • 说明:此处才能访问到@ContentChildren@ContentChild的变量值。

6. ngAfterViewInit
  • 用途:当需要在组件视图加载完成后,修改视图内容或操作DOM节点、或者与子组件进行交互时,可在其中执行相关任务。例如,在页面加载完成后修改其标题。

  • 说明:此处才能访问到@ViewChildren@ViewChild的变量值。同时,每次执行本钩子函数之前,都会先将子组件的周期钩子执行到ngAfterViewChecked之后,才会继续执行后面周期函数。

    ngAfterViewInit执行之前子组件执行的内容

7. ngAfterViewChecked
  • 用途:在组件视图或子组件的视图发生变化后,如某个指标值发生变化后,可以根据新的值添加对应的操作。
8. ngOnDestroy
  • 用途: 用于在组件销毁时清理资源。如从可观察对象中取消订阅或释放资源。

二、Q&A

1. 为什么会遇到ExpressionChangedAfterItHasBeenCheckedError报错?
  • 原因:组件html上展示的数据和ts代码里的数据不一致。即组件在完成变更检测之后,某个数据又被子组件/孙组件的代码更新了。这在angular中是不被允许的,因为angular是执行的单向数据流,即一旦 component 中的变化检测已经完成了,任何在 child component 或者更低层级的 component 都不允许去改变 component 中的属性。
  • 解决方案:找到数据不同步的原因,正确使用钩子函数(推荐);强制手动检测(setTimeout、Promise、cd.detectChanges)(最后的手段)[3]
参考资料:
  1. Angular:生命周期和钩子函数

  2. Angular 完整组件生命週期介绍

  3. NG0100: Expression has changed after it was checked

  4. https://www.angularthink.in/2023/05/lifecycle-hooks.html

  5. 组件的生命周期

  6. angular单项数据流

标签:生命周期,函数,钩子,用途,视图,组件,angular
From: https://www.cnblogs.com/lhjc/p/17610349.html

相关文章

  • 【6.0】Vue之生命周期函数
    【一】Vue的生命周期【1】详解Vue.js生命周期是指在Vue实例从创建到销毁的过程中,会经历一系列的钩子函数,这些钩子函数可以让我们在不同的阶段插入自定义的代码。Vue的生命周期分为三个主要阶段:创建阶段更新阶段销毁阶段。(1)创建阶段beforeCreate:在实例初始化之后,......
  • quarkus依赖注入之七:生命周期回调
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本篇的知识点是bean的生命周期回调:在bean生命周期的不同阶段,都可以触发自定义代码的执行触发自定义代码执行的具体方式,是用对应的注解去修饰要执行的方法,如下图......
  • day 122 - bean的作用域,生命周期,工厂模式
    bean的作用域在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围singleton(默认)在IOC容器中,这个bean的对象始终为单实例在ioc容器初始化时创建对象prototype这个bean在IOC容器中有多个实例在获取bean时创建对象<!--scope设置bean的作用域:......
  • 7-Locust自带的events钩子函数
    EventsHookLocust提供了事件钩子函数,它们可以在特定的时间点执行,例如test_start,其类似与pytest中的setup_module使用方法举例使用时需要引入events模块fromlocustimportevents自定义一个方法,若不清楚需要接收什么参数,一般来说直接给一个可变关键字参数**kwargs即可(除非......
  • Spring 容器里 Bean 生命周期中可扩展的 SpringBoot 接口
    Gitee:Demo源码1.ApplicationContextInitializer这是整个spring容器在刷新之前初始化ConfigurableApplicationContext的回调接口。@Slf4jpublicclassTestApplicationContextInitializerimplementsApplicationContextInitializer{@Overridepublicvoidi......
  • k8s 学习笔记之 Pod——Pod 的生命周期
    Pod生命周期我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程:pod创建过程运行初始化容器(initcontainer)过程运行主容器(maincontainer)容器启动后钩子(poststart)、容器终止前钩子(prestop)容器的存活性探测(livenessprobe)、就绪性探......
  • 结合前端实现ORM对数据的增删改查、动静态网页,Django创建表关系、请求生命周期流程图
    通过结合前端页面实现ORM对数据的增删改查写一个页面,把数据库中的数据以表格的形式展示出来,然后在每一行的后面加两个按钮,分别是修改、删除的按钮。1.先创建一张UserInfo表格:在Django中没有提供tinyint、smallint,就只提供了int和bigint,如果想要写其他类型,需要自己定义......
  • Angular F5重新加载进入404错误
     解决方法: 在app.module.ts中增加如下配置 参考......
  • 如何安装 Angular Grid 与配置 Angular Grid
    要在Angular脚手架项目中安装和配置AngularGrid,可以按照以下步骤进行操作:在项目根目录下,打开终端或命令提示符。运行以下命令来安装AngularGrid包:npminstallag-grid-angularag-grid--save 这将安装ag-grid-angular和ag-grid包,并将它们添加到你的项目的p......
  • iOS应用程序生命周期(前后台切换,…
    //开发app,我们要遵循apple公司的一些指导原则,原则如下:1、应用程序的状态状态如下:Notrunning 未运行 程序没启动Inactive     未激活    程序在前台运行,不过没有接收到事件。在没有事件处理情况下程序通常停留在这个状态Active      激活 ......