iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >详解Angular组件之生命周期(二)
  • 353
分享到

详解Angular组件之生命周期(二)

2024-04-02 19:04:59 353人浏览 安东尼
摘要

目录一、view钩子1、实现ngAfterViewInit和ngAfterViewChecked钩子时注意事项2、在一个变更检测周期中禁止一个视图被组装好之后再去更新视图二、cont

一、view钩子

view钩子有2个,ngAfterViewInit和ngAfterViewChecked钩子。

1、实现ngAfterViewInit和ngAfterViewChecked钩子时注意事项

以父组件调用子组件方法中例子为基础,在父组件中实现ngAfterViewInit和ngAfterViewChecked钩子。

这两个钩子是在组件的模版所有内容组装完成后,组件模版已经呈现给用户看了,之后这两个钩子方法会被调用。


@ViewChild('child1')
child1:Child1Component; //父组件中获得子组件的引用

nGonInit(){
  this.child1.greeting("Tom");
}

ngAfterViewInit(){
  console.log("父组件的视图初始化完毕");
}

ngAfterViewChecked(){
  console.log("父组件的视图变更检测完毕");
}

在子组件中也实现这两个钩子


export class Child1Component implements OnInit,AfterViewInit,AfterViewChecked{

  constructor() { }

  ngOnInit() {
  }

  greeting(name: string) {
    console.log("hello" + name);
  }

  ngAfterViewInit(){
    console.log("子组件的视图初始化完毕");
  }
  
  ngAfterViewChecked(){
    console.log("子组件的视图变更检测完毕");
  }
}

在父组件的ngOnInit中不直接调用子组件的greeting()方法,而是通过一个定时器每隔5s去调用一次。


ngOnInit(){
  setInterval(()=>{
    this.child1.greeting("Tom");
  },5000);
}

总结:

1、Init先调用,checked后调用

看1中,首先子组件视图初始化完毕,然后子组件视图变更检测完毕。

2、子组件先于父组件被组装好

看2中,因为父组件中声明了2个子组件,所以看到有2个子组件 初始化的动作。1号子组件初始化完毕,变更检测完毕,2号子组件初始化完毕,变更检测完毕后,父组件的初始化完毕才会被调用,然后父组件的变更检测完毕才会被调用。

3、ngAfterViewInit只会在初始化完毕被调用一次。

4、定时器触发方法后,两个子组件的变更检测会被调用,父组件的变更检测也会被调用。

视图没有发生任何改变,变更检测也会被调用,实现来ngAfterViewChecked()钩子的方法都会被调用。

所以ngAfterViewChecked()钩子一定要写的精简以免出现性能问题。

2、在一个变更检测周期中禁止一个视图被组装好之后再去更新视图

例子:

父组件

有一个message初始化为abc.显示到模版上。

message:string='abc';

在父组件的ngAfterViewInit中更改message值。


ngAfterViewInit(){
  console.log("父组件的视图初始化完毕");
  this.message="def";
}

会报错。ngAfterViewInit()和ngAfterViewChecked()都是在视图组装完成后触发的,所以在这两个钩子中更新组件中被绑定的属性,触发组件视图的变化,angular就会抛出异常。

解决办法:

把代码放在另一个时间循环里面。


ngAfterViewInit(){
  console.log("父组件的视图初始化完毕");
  setTimeout(()=>{
    this.message="def";
  },0);
}

二、content钩子

包括2个与投影相关的钩子,ngAfterContentInit()和ngAfterContentChecked()钩子。

ngAfterContentInit,ngAfterContentChecked和ngAfterViewInit,ngAfterViewChecked类似。

ngAfterViewInit,ngAfteViewChecked是在整个组件的视图全部组装完成后调用的。

ngAfterContentInit,ngAfterContentChecked是在被投影进来的内容组装完成后调用的。

1、Content钩子的调用顺序例子

父组件中实现ngAfterContentInit,ngAfterContentChecked和ngAfterContentInit()


export class AppComponent implements OnInit, AfterViewInit, AfterContentInit,AfterContentChecked{

ngAfterViewInit(){
  console.log("父组件的视图初始化完毕");
}

ngAfterContentInit(){
  console.log("父组件投影内容初始化完毕");
}
ngAfterContentChecked(){
  console.log("父组件投影内容变更检测完毕");
}

子组件中也实现这3个接口


export class Child2Component implements OnInit,AfterViewChecked,AfterContentInit,AfterContentChecked{

  constructor() { }

  ngOnInit() {
  }
  ngAfterViewInit(){
    console.log("子组件的视图初始化完毕");
  }
  
  ngAfterContentInit(){
    console.log("子组件投影内容初始化完毕");
  }
  ngAfterContentChecked(){
    console.log("子组件投影内容变更检测完毕");
  }
}

组装视图时,先组装投影进来的内容,然后组装子组件中视图的内容,再加上父组件本身的内容,然后才是父组件视图初始化完毕。

2、Content钩子中可以修改模版内容

view钩子里不能修改模版内容,因为模版内容组装完毕后不能再修改里面内容。但是Content钩子里可以。

因为Content钩子调用时整个视图还没有组装完毕,只是投影进来的内容被组装完毕了。

父组件中在ngAfterContentInit钩子里修改message信息不会报错。


export class AppComponent implements OnInit, AfterViewInit, AfterContentInit,AfterContentChecked{
message:string='abc';
ngAfterViewInit(){
  console.log("父组件的视图初始化完毕");
}

ngAfterContentInit(){
  console.log("父组件投影内容初始化完毕");
  this.message='def';
}
ngAfterContentChecked(){
  console.log("父组件投影内容变更检测完毕");
}
ngOnInit(){

}

三、总结

上面四个方法在属性初始化阶段:构造函数是初始化对象,ngOnChanges是初始化输入属性,ngOnInit是初始化除了输入属性以外其它的所有属性,ngDoCheck是做一次变更检查。

这四个方法执行完整个组件所有属性都被赋予了应该被赋的值。

组件开始渲染它的视图,首先渲染投影进来的内容,投影进来的内容渲染完调用ngAfterContentInit和ngAfterContentChecked钩子方法。

如果有子组件会调子组件创建的过程,子组件创建完或者没有子组件,整个组件的视图都初始化完毕了以后,会调ngAfterViewInit和ngAfterViewChecked钩子方法。

至此,整个组件初始化完毕,组件会呈现给用户交互。

用户交互触发Angular的变更检测机制,检测到发生了变更,在当前组件树上所有活动组件上被实现的带有check的钩子方法都会被调用,用来检查当前组件的变化,如果变化导致某个组件的输入属性也改变了,那个组件的ngOnChanges也会被调用。

组件在路由地址变化从而被销毁的时候会调ngOnDestory()。

在ngOnDestory中销毁一些引用的资源,比如反订阅一个流,清除定时器之类的。

以上就是详解Angular组件之生命周期(二)的详细内容,更多关于Angular的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详解Angular组件之生命周期(二)

本文链接: https://www.lsjlt.com/news/126638.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Angular组件之生命周期(二)
    目录一、view钩子1、实现ngAfterViewInit和ngAfterViewChecked钩子时注意事项2、在一个变更检测周期中禁止一个视图被组装好之后再去更新视图二、cont...
    99+
    2024-04-02
  • 详解Angular组件生命周期(一)
    目录概述一、钩子的调用顺序二、onChanges钩子三、变更检测机制和DoCheck()钩子概述 组件声明周期以及angular的变化发现机制 红色方法只执行一次。 变更检测执行的...
    99+
    2024-04-02
  • Angular组件的生命周期有哪些
    这期内容当中小编将会给大家带来有关Angular组件的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概述组件声明周期以及angular的变化发现机制红色方法只执行一次。变更检测执行的绿色方法...
    99+
    2023-06-15
  • React组件的生命周期详解
    目录React生命周期1、初始化阶段2、旧生命周期3、新生命周期4、react中性能优化的方案React生命周期 1、初始化阶段 componentDidMount:render之前...
    99+
    2023-03-19
    React 组件 生命周期 React 生命周期
  • angular组件通讯和组件生命周期是什么
    本文小编为大家详细介绍“angular组件通讯和组件生命周期是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“angular组件通讯和组件生命周期是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
  • Angular学习之聊聊生命周期
    ngAfterContentInit当把外部的内容投影到内部组件,第一次调用 ngDoCheck 之后调用 ngAfterContentInit,而且只调用一次。// demo.component.ts ngAfterContentIni...
    99+
    2023-05-14
    生命周期 javascript Angular Angular.js
  • vue的生命周期钩子与父子组件的生命周期详解
    目录vue的生命周期钩子的介绍父子组件的生命周期加载渲染过程父组件更新过程子组件更新过程父子组件更新过程销毁过程代码示例created和mounted的区别vue的生命周期钩子的介绍...
    99+
    2022-11-13
    vue 生命周期 vue 父子组件生命周期
  • Android12四大组件之Activity生命周期变化详解
    目录前言点击返回键Activity不在onDestroy重新onBackPressed时的注意点总结前言 Android12 有很多令人惊喜的变化,比如基于 Material You...
    99+
    2024-04-02
  • Flutter组件生命周期和App生命周期示例解析
    目录引言无状态组件(StatelessWidget)有状态组件(StatefulWidget)StatefulWidget生命周期详细分析1. createState2. initS...
    99+
    2022-12-08
    Flutter 组件APP生命周期 Flutter 生命周期
  • Vue组件与生命周期详细讲解
    目录写在前面生命周期图解总结写在前面 Vue.js的核心就是以简洁的模板语法将数据渲染进Dom系统。vue实例在渲染成html的时候往往要经过以下的步骤: 读取数据和方法,设置数据绑...
    99+
    2022-11-13
    Vue组件 Vue生命周期
  • Android入门教程之组件Activity的生命周期详解
    目录返回栈Activity 状态1. 运行状态2. 暂停状态3. 停止状态4. 销毁状态Activity 的生存期onCreate()onStart()onResume()onPau...
    99+
    2024-04-02
  • spring之Bean的生命周期详解
    Bean的生命周期:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁Bean的定义Bean 是 spring 装配的组件模型,一切实体类都可以配置成一个 Bean ,进而就可以在任何其他的 Bean 中使用,一个 Be...
    99+
    2023-05-31
    spring bean 生命周期
  • Vue之生命周期函数详解
    目录生命周期函数常用的生命周期的钩子 关于Vue销毁实例: 总结 生命周期函数 生命周期函数又叫:生命周期回调函数,生命周期函数、 生命周期钩子 是什么:Vue在关键时刻帮我们调用...
    99+
    2024-04-02
  • Flutter有状态组件StatefulWidget生命周期详解
    目录1、StatefulWidget的背后2、StatefulWidget的生命周期2.1创建阶段2.2更新阶段2.3销毁阶段总结:1、StatefulWidget的背后 flut...
    99+
    2023-01-13
    Flutter StatefulWidget生命周期 Flutter StatefulWidget有状态组件
  • Blazor组件的生命周期解析
    执行周期 1. SetParametersAsync2. OnInitializedAsync(调用两次) 和 OnInitialized;3. OnParametersSetAsy...
    99+
    2024-04-02
  • Angular组件中生命周期钩子的示例分析
    这篇文章主要介绍了Angular组件中生命周期钩子的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Angular 组件生命周期钩子其中,红色标记的生命周期钩子只调用一...
    99+
    2023-06-14
  • Vue生命周期详解
    这篇博客将会从下面四个常见的应用诠释组件的生命周期,以及各个生命周期应该干什么事 单组件的生命周期父子组件的生命周期兄弟组件的生命周期宏mixin的生命周期 生命周期:Vue 实例从...
    99+
    2024-04-02
  • 详解vue生命周期
    目录为什么要理解生命周期什么是生命周期生命周期钩子函数created和mounted钩子的一些实战用法1.异步函数 2.Vue.nextTick对异步函数的结果进行操作 总结为什么要...
    99+
    2024-04-02
  • rust生命周期详解
    目录rust生命周期借用检查函数中的生命周期手动声明生命周期结构体中的生命周期生命周期消除三条消除原则生命周期约束静态生命周期rust生命周期 生命周期是rust中用来规定引用的有效...
    99+
    2023-03-19
    rust生命周期
  • React组件的生命周期详细描述
    目录一、什么是生命周期二、装载过程1、constructor2、render3、componentWillMount和componentDidMount三、更新过程1、compone...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作