我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Angular组件的生命周期有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Angular组件的生命周期有哪些

这期内容当中小编将会给大家带来有关Angular组件的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

概述

组件声明周期以及angular的变化发现机制

Angular组件的生命周期有哪些

红色方法只执行一次。

变更检测执行的绿色方法和和组件初始化阶段执行的绿色方法是一个方法。

总共9个方法。

每个钩子都是@angular/core库里定义的接口。

import { Component, OnInit } from '@angular/core';@Component({  selector: 'app-life',  templateUrl: './life.component.html',  styleUrls: ['./life.component.css']})export class LifeComponent implements OnInit {  constructor() { }  ngOnInit() {  }}

虽然接口不是必须的,Angular检测到钩子方法就会去执行它,还是建议把接口写上。

一、钩子的调用顺序

import { Component, OnInit, OnChanges, DoCheck, AfterContentInit, AfterContentChecked, AfterViewInit, AfterViewChecked, OnDestroy, Input, SimpleChange, SimpleChanges } from '@angular/core';let logIndex: number = 1; //计数器@Component({  selector: 'app-life',  templateUrl: './life.component.html',  styleUrls: ['./life.component.css']})export class LifeComponent implements OnInit, OnChanges, DoCheck, AfterContentInit  , AfterContentChecked, AfterViewInit, AfterViewChecked, OnDestroy {  @Input()  name: string;  logIt(msg: string) {    console.log(`# ${logIndex++}  ${msg}`);  }  constructor() {    this.logIt("name属性在constructor里的值是: " + this.name);  }  ngOnInit() {    this.logIt("name属性在OnInit里的值是: " + this.name);  }  ngOnChanges(changes: SimpleChanges): void { // 传入一个SimpleChanges对象    let name = changes['name'].currentValue;    this.logIt("name属性在ngOnChanges里的值是: " + this.name);  }  ngDoCheck(): void {    this.logIt("DoCheck");  }  ngAfterContentInit() {    this.logIt("ngAfterContentInit");  }  ngAfterContentChecked() {    this.logIt("ngAfterContentChecked");  }  ngAfterViewInit() {    this.logIt("ngAfterViewInit");  }  ngAfterViewChecked() {    this.logIt("ngAfterViewChecked");  }  ngOnDestroy() {    this.logIt("ngOnDestory");  }}

Angular组件的生命周期有哪些

初始化逻辑依赖输入属性的值时,初始化逻辑一定要写在ngOnInit里,不能写在constructor里面。

DoCheck在Angular的每个变更检测周期中调用。

ngAfterContentInit和ngAfterContentChecked跟模版,组件的内容投影相关的。

ngAfterViewInit和ngAfterViewChecked跟组件的模版,初始化视图相关的。

二、onChanges钩子

父组件初始化或修改子组件的输入参数时会被调用。

需要先理解js中可变对象 和 不可变对象。

//字符串是不可变的var greeting = "Hello";greeting = "Hello World";//对象是可变的var user = { name: "Tom" };user.name = "Jerry";

例子:

child组件有3个属性,其中2个是输入属性。

父组件有一个greeting属性和一个name属性是Tom的user对象。

父组件要改变输入属性,所以greeting和user.name是双向绑定。

<div class="parent">    <h3>我是父组件</h3>    <div>问候语:<input type="text" [(ngModel)]="greeting"></div>    <div>      姓名:      <input type="text" [(ngModel)]="user.name">    </div>    <app-child [greeting]="greeting"  [(user)]="user"> </app-child></div>

父组件改变两个input的值,值变化时候传入子组件的值也会变化,传入子组件的输入属性的值变化时会触发ngOnChanges()。

Angular组件的生命周期有哪些

父组件初始化子组件。初始化的时候调一次ngOnChanges(),初始化后子组件的greeting变成Hello,也就是父组件上的greeting的值。

user变成一个name属性为Tom的对象。

Angular组件的生命周期有哪些

改变输入属性的值,父组件问候语greeting改为Helloa。

Angular的变更检测刷新不可变对象,也就是greeting的值,然后调用ngOnChanges()方法,greeting的值从之前的hello,变为了Helloa。

Angular组件的生命周期有哪些

修改user.name为Tomb,控制台上没有打印新的消息。

因为用户只是改变了可变对象user的属性,user对象的引用自身是没有改变的,所以onChanges()方法没有被调用。

虽然可变对象的属性改变不会触发ngOnChanges()方法调用,但是子组件的user对象的属性仍然改变了,由于Angular的变更监测机制仍然捕获了组件中每个对象的属性变化。

Angular组件的生命周期有哪些

改变子组件的message属性也不引起子组件的onChanges()方法调用。因为message不是输入属性。而ngOnChanges()只有在输入属性变化时候被调用。

三、变更检测机制和DoCheck()钩子

变更检测由zone.js实现的。保证组件的属性变化和页面的变化同步。浏览器中发生的异步事件(点击按钮,输入数据,数据从服务器返回,调用了setTimeout()方法)都会触发变更检测。

变更检测运行时,检测组件模版上的所有绑定关系,如果组件属性被改变,与其绑定的模版相应区域可能需要更新。

注意:变更检测机制只是将组件属性的改变反应到模版上,变更检测机制本身永远不会改变组件属性的值。

两种变更检测策略。

  • Default 检测到变化,检查整个组件树。

  • OnPush 只有当输入属性变化时,才去检测该组件及其子组件。

Angular组件的生命周期有哪些

Angular应用是一个以主组件为根的组件树,每个组件都会生成一个变更检测器,任何一个变更检测器检测到变化,zone.js就根据组件的变更检查策略来检测组件(也就是调doCheck()钩子),来判断组件是否需要更新它的模版。

DoCheck检查是从根组件开始往下检查所有的组件树,不管变更发生在哪个组件。

例子:

监控user.name这种可变对象的属性的改变。

在child中加一个oldUsername来存变更前的username,加一个changeDetected属性标志username是否发生变化,默认是false。 noChangeCount计数器默认是0。

import { Component, OnInit, Input, OnChanges, SimpleChanges, DoCheck } from '@angular/core';@Component({  selector: 'app-child',  templateUrl: './child.component.html',  styleUrls: ['./child.component.css']})export class ChildComponent implements OnInit, OnChanges, DoCheck {  @Input()  greeting: string;  @Input()  user: { name: string };  message: string = "初始化消息";  oldUsername: string;  changeDetected: boolean = false;  noChangeCount: number = 0;  constructor() { }  ngOnInit() {  }  ngOnChanges(changes: SimpleChanges): void {    console.log(JSON.stringify(changes, null, 2));  }  ngDoCheck() {    if (this.user.name !== this.oldUsername) {      this.changeDetected = true;      console.log("DoCheck: user.name 从 " + this.oldUsername + "变为" + this.user.name);      this.oldUsername = this.user.name;    }    if (this.changeDetected) {//变化来计数器清0      this.noChangeCount = 0;    } else {//没变化      this.noChangeCount++;      console.log("DoCheck:user.name没变化时ngDoCheck方法已经被调用" + this.noChangeCount + "次")    }    this.changeDetected = false;//最后不管变没变标志位复位  }}

Angular组件的生命周期有哪些

页面加载完成:user.name没变化时DoCheck方法已经被调用1次。

Angular组件的生命周期有哪些

鼠标点击,不改变任何值,点击触发变更检测机制,所有组件的DoCheck就会被调用。

Angular组件的生命周期有哪些

修改Tom为Tomb,DoCheck捕捉到Tom变为Tomb。

虽然DoCheck()钩子可以检测到user.name什么时候发生变化,但是使用必须小心,ngDoCheck()钩子被非常频繁的调用。每次变更检测周期后发生变化的地方都会调用。

对ngDoCheck()的实现必须非常高效,非常轻量级,否则容易引起性能问题。

上述就是小编为大家分享的Angular组件的生命周期有哪些了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Angular组件的生命周期有哪些

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

下载Word文档

猜你喜欢

Angular组件的生命周期有哪些

这期内容当中小编将会给大家带来有关Angular组件的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概述组件声明周期以及angular的变化发现机制红色方法只执行一次。变更检测执行的绿色方法
2023-06-15

ASP.NET组件的生命周期有哪些

本篇文章给大家分享的是有关ASP.NET组件的生命周期有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、 Instance 实例化通过控件的构造器所实例化。还可以通过被父
2023-06-18

微信小程序组件的生命周期有哪些

微信小程序组件的生命周期有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。组件 attached 生命周期执行次数按照通常的理解,除moved/show/hi
2023-06-06

Activity的生命周期有哪些

这期内容当中小编将会给大家带来有关Activity的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android中Activity的生命周期,网上大多数文章基本都是直接贴图、翻译API,比较
2023-05-31

php的生命周期有哪些

这期内容当中小编将会给大家带来有关php的生命周期有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Per
2023-06-14

Angular组件中生命周期钩子的示例分析

这篇文章主要介绍了Angular组件中生命周期钩子的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Angular 组件生命周期钩子其中,红色标记的生命周期钩子只调用一
2023-06-14

JavaScript内存的生命周期有哪些

这篇文章给大家介绍JavaScript内存的生命周期有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、说明内存分配:当我们申明变量、函数、对象的时候,系统会自动为他们分配内存内存使用:即读写内存,也就是使用变量、
2023-06-15

react的生命周期函数有哪些

react的生命周期函数有:1、componentWillMount函数;2、componentDidMount函数;3、shouldComponentUpdate函数;4、componentWillUpdate函数;5、componentDidUpdate函数;6、componentWillUnmount函数;7、componentWillReceiveProps函数。
2023-05-14

activity生命周期的方法有哪些

在Android开发中,Activity的生命周期方法有以下几种:1. onCreate(): 在Activity被创建时调用,用于初始化界面和数据。2. onStart(): 在Activity可见但不处于前台时调用,用于进行必要的准备工
2023-09-11

servlet的生命周期结构有哪些

servlet的生命周期结构有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.Servlet 生命周期:Servlet 加载--->实例化--->服务--
2023-05-31

vue的生命周期有哪些阶段

这篇文章主要讲解了“vue的生命周期有哪些阶段”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue的生命周期有哪些阶段”吧!有4大阶段:1、初始化阶段,包含beforeCreate(创建前)
2023-07-04

servlet生命周期有哪些阶段

这篇文章主要介绍了servlet生命周期有哪些阶段的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇servlet生命周期有哪些阶段文章都会有所收获,下面我们一起来看看吧。Servlet生命周期是指servlet从
2023-07-05

Flutter组件生命周期和App生命周期示例解析

这篇文章主要为大家介绍了Flutter组件生命周期和App生命周期示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

Vue生命周期函数有哪些

小编给大家分享一下Vue生命周期函数有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.BeforeCreate()Vue实例已经创建,但是data,和methods中的数据和方法都未被初始化。就是说你可以在befor
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录