Angular 学习日记 - 7 - 生命周期

这篇具有很好参考价值的文章主要介绍了Angular 学习日记 - 7 - 生命周期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单做个图解

Angular 学习日记 - 7 - 生命周期,学习

 建议在实现Angular 生命周期(LifeCycle Hooks)时,可以写在类实现的后面,既可以方便他人知晓用了哪些生命周期方法,又可以用vscode自动补全来生成该方法,还可以防止拼错方法名(指我自己)

import {
  AfterContentChecked,
  AfterContentInit,
  AfterViewChecked,
  AfterViewInit,
  Component,
  DoCheck,
  OnChanges,
  OnDestroy,
  OnInit,
  SimpleChanges,
} from '@angular/core';

export class ServerComponent
  implements
    OnInit,
    OnChanges,
    DoCheck,
    AfterContentInit,
    AfterContentChecked,
    AfterViewInit,
    AfterViewChecked,
    OnDestroy
{
  constructor() {}

  ngOnInit(): void {
    throw new Error('Method not implemented.');
  }
  ngOnChanges(changes: SimpleChanges): void {
    throw new Error('Method not implemented.');
  }
  ngDoCheck(): void {
    throw new Error('Method not implemented.');
  }
  ngAfterContentInit(): void {
    throw new Error('Method not implemented.');
  }
  ngAfterContentChecked(): void {
    throw new Error('Method not implemented.');
  }
  ngAfterViewInit(): void {
    throw new Error('Method not implemented.');
  }
  ngAfterViewChecked(): void {
    throw new Error('Method not implemented.');
  }
  ngOnDestroy(): void {
    throw new Error('Method not implemented.');
  }
}

简单讲点 

1、ngOnInit()

在构造函数触发后触发

  constructor() {
    console.log('Constructor Called');
  }

  ngOnInit(): void {
    console.log('OnInit Called');
  }

Angular 学习日记 - 7 - 生命周期,学习 

2、ngOnChanges()

触发时会自动传入一个SimpleChange类型的参数,此处HTML代码不重要,仅展示TS代码

export class ServerComponent implements OnInit {
  @Input() element: { name: string; content: string; no: number };

  ngOnChanges(changes: SimpleChanges) {
    console.log('OnChanges Called', changes);
  }

  ...省略构造函数和OnInit方法...
}

Angular 学习日记 - 7 - 生命周期,学习

这里打印的 element 对应的是TS文件中 @Input() 修饰的 element 属性。

一个有意思的例子:

在该组件的基础上加入一个name属性,传入element.name 并用一个按钮来修改它的值。

该组件代码:

import { Component, Input, OnInit, SimpleChanges } from '@angular/core';

@Component({
  selector: 'app-server',
  templateUrl: './server.component.html',
  styleUrls: ['./server.component.css'],
})
export class ServerComponent implements OnInit {
  @Input() element: { name: string; content: string; no: number };
  @Input() name: string;

  constructor() {
    console.log('Constructor Called');
  }

  ngOnChanges(changes: SimpleChanges) {
    console.log('OnChanges Called', changes);
  }

  ngOnInit(): void {
    console.log('OnInit Called');
  }
}
<div class="panel panel-primary">
  <div class="panel-heading">{{ element.name }}</div>
  <div class="panel-body">
    <p>
      <strong *ngIf="element.no % 2 === 0" style="color: red">{{
        element.content
      }}</strong>
      <em *ngIf="element.no % 2 === 1" style="background-color: red">{{
        element.content
      }}</em>
    </p>
  </div>
</div>

根组件代码:

export class ServersComponent implements OnInit {
  servers = [{ name: 'server1', content: 'Test server 1', no: 1 }];

  onChangeFirstName() {
    this.servers[0].name = 'Changed!';
  }
  
  ...省略无用部分...
}
...省略无用部分...  
<button class="btn btn-primary" (click)="onChangeFirstName()">
    Change First Name
  </button>
  <hr />
  <div *ngFor="let server of servers">
    <app-server [element]="server" [name]="server.name"></app-server>
  </div>

很容易发现,name的修改,并没有触发 element 的变动。因为在内存中,element 属性指向的还是同一个对象,没有变化。

Angular 学习日记 - 7 - 生命周期,学习

3、 ngDoCheck()

提供一个变更检测运行时执行的方法。因为DoCheck有很多触发器,所以这里不适合去执行太过复杂的代码,会花费太多资源。

值得一提的是Angular 变更检测运行的频率和DoCheck的执行频率一致。

  ngDoCheck() {
    console.log('DoCheck Called');
  }

Angular 学习日记 - 7 - 生命周期,学习 

因为在开发模式下运行,Angular有一个额外的检测周期,所以这里调用了两次。

4、ngAfterContentInit() 和 ngAfterContentChecked()

可以看到它们在DoCheck之后调用,这是合理的,因为它们在每个变更周期后调用。

  ngAfterContentInit() {
    console.log('AfterContentInit Called');
  }

  ngAfterContentChecked() {
    console.log('AfterContentChecked Called');
  }

Angular 学习日记 - 7 - 生命周期,学习

5、ngAfterViewInit() 和 ngAfterViewChecked()

显而易见,它们在content check之后调用

  ngAfterViewInit() {
    console.log('AfterViewInit Called');
  }

  ngAfterViewChecked() {
    console.log('AfterViewChecked Called');
  }

Angular 学习日记 - 7 - 生命周期,学习

6、 ngOnDestory()

组件销毁时触发。为了能看到组件被销毁,预先给该组件添加了一个删除按钮。

  ngOnDestroy() {
    console.log('OnDestroy Called');
  }

Angular 学习日记 - 7 - 生命周期,学习 文章来源地址https://www.toymoban.com/news/detail-765369.html

到了这里,关于Angular 学习日记 - 7 - 生命周期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Angular 基础] - 生命周期函数

    之前的笔记: [Angular 基础] - Angular 渲染过程 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上为静态页面,即不涉及到跨组件交流的内容 以下涉及到组件内的沟通,从这开始数据就“活”了 [Angular 基础] - 自定义事件 自定义属性 [Angular 基础]

    2024年02月20日
    浏览(42)
  • Angular系列教程之生命周期钩子

    Angular是一种流行的前端开发框架,它提供了许多功能强大且易于使用的工具和特性。其中之一就是生命周期钩子(Lifecycle Hooks),它们允许我们在组件的不同生命周期阶段执行自定义代码。本文将介绍Angular的生命周期钩子以及如何使用它们。 生命周期钩子是一些用于在组件

    2024年01月17日
    浏览(44)
  • 前端开发框架生命周期详解:Vue、React和Angular

    作为前端开发者,掌握前端开发框架的生命周期是非常重要的。在现代Web应用开发中,Vue.js、React和Angular是三个最流行的前端开发框架。本篇博客将详细解读这三个框架的生命周期,包括每个阶段的含义、用途以及如何最大限度地利用它们。通过详细的代码示例和实用的技巧

    2024年02月13日
    浏览(53)
  • Angular--父子组件生命周期钩子(lifecycle hooks)执行过程

    组件初始化过程中,生命周期钩子执行顺序: constructor()构造函数,初始化class,(constructor不属于Angular生命周期钩子的范畴,这里只是说明组件组件初始化会先调用构造函数)。 ngOnChanges()--如果组件没有输入属性(@Input()),或者使用时没有提供任何输入属性,那么angular不会调用它

    2024年01月20日
    浏览(52)
  • Angular 17+ 高级教程 – Component 组件 の 生命周期钩子 (Lifecycle Hooks)

    之前在 Component 组件 の Angular Component vs Custom Elements 文章中,我们有学习过几个基础的 Lifecycle Hooks。 比如 OnChanges、OnInit、AfterViewInit、OnDestroy,但那篇只是微微带过而已。 这篇让我们来深入理解 Angular 的 Lifecycle Hooks。   在 Component 组件 の Dependency Injection NodeInjector 文章中

    2024年03月09日
    浏览(52)
  • Rust学习-生命周期

    Rust 最与众不同的功能 之前学习中,有多种可能类型时必须注明类型;同理,引用的生命周期以一些不同方式相关联时,需要使用泛型生命周期参数来注明关系,这样就能确保运行时实际使用的引用有效 Rust 编译器有一个 借用检查器(borrow checker) 它比较作用域来确保所有的

    2024年02月16日
    浏览(45)
  • 【Unity学习笔记】生命周期

    官方文档:事件函数的执行顺序 如图: 脚本的生命周期主要经历以下几个阶段: 初始化阶段,(包括初始化Awake,OnEnable,然后Editor的Reset被穿插在着初始化过程之间,因此我们可以在脚本里重写Reset方法,这将在编辑器中的game的start之前执行。最后Start),当我们开始游戏的

    2024年02月14日
    浏览(40)
  • 学习Vue:组件生命周期

    在Vue.js中,组件的生命周期是指组件从创建到销毁的整个过程,而生命周期钩子函数则是在不同阶段执行的函数,允许您在特定时间点添加自定义逻辑。本文将详细介绍组件的生命周期以及常用的生命周期钩子函数。 组件的生命周期可以分为以下几个阶段: 创建阶段: 在这

    2024年02月12日
    浏览(42)
  • Vue生命周期详解学习笔记

    生命周期又名生命周期回调函数,生命周期函数,生命周期钩子。 生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数。 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。 生命周期中的this指向vm或组件实例对象。 钩子函数用来描述Vue实例从

    2024年02月16日
    浏览(39)
  • 前端学习--Vue(4) 生命周期

    一个组件从创建-运行-销毁的真个阶段,强调的是一个时间段  1.1.1 创建 (只执行一次) created() 阶段任务:最早可以使用methods中的方法发起ajax请求获取数据,并将数据挂载到data中 mounted() 阶段任务:最早可以操作dom元素 1.1.2 运行 (最少0次,最多n次) beforeUpdate() 触发时机:

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包