angular生命周期
dearweb 发布:2021-08-26 21:43:25阅读:生命周期通俗的讲就是组件的创建、组件更新、组件销毁的时候会触发的一系列的方法,当angular使用构造函数新建一个组件或指令后,就会按下面的顺序在特定的时刻调用这些生命周期钩子方法,下面我们一起来看看吧。
1. ngOnChanges
时机:当被绑定的输入属性(@input)的值发生变化时调用,首次调用一定会发生在 ngOnInit之前;该回调方法会收到一个包含当前值和原值的changes对象。在有输入属性的情况下才会调用,该方法接受当前和上一属性值的SimpleChanges对象。如果有输入属性,会在ngOnInit之前调用。
接口:OnChanges;
适用范围: 指令和组件种;
2.ngOnInit
时机:在第一轮 ngOnChanges 完成之后调用。 ( 也就是说当每个输入属性(@input)的值都触发了一次ngOnChanges 之后才会调用ngOnInit ,此时所有的输入属性都已经有了正确的初始绑定值 );在组件初始化的时候调用,只调用一次,在第一次调用ngOnChanges之后调用
接口: OnInit
适用范围: 指令和组件种
3.ngDoCheck
时机:在每个 Angular 变更检测周期中调用;用来检测所有变化(无论是Angular本身能检测还是无法检测的),并作出相应行动。在每次执行“变更检测”时被调用。在组件定义的属性或方法变更时调用(用于脏值之检测,非常耗性能,因为会把所有的属性和方法都检测一遍)
接口: DoCheck;
适用范围: 指令和组件中
4.ngAfterContentInit
时机:当把内容投影进组件之后调用;在组件内容初始化之后调用,在第一次ngDoCheck之后调用,只调用一次
接口:AfterContentInit
适用范围: 组件中
5.ngAfterContentChecked
时机:每次完成被投影组件内容的变更检测之后调用;在组件每次检查内容放生变更时调用。在ngAfterContentInit和每次ngDoCheck之后调用
接口:AfterContentChecked
适用范围:组件中
6.ngAfterViewInit
时机:初始化完组件视图及其子视图之后调用;在组件相应的视图初始化之后调用,第一次ngAfterContentChecked之后调用,只调用一次
接口:AfterViewInit
适用范围:组件中
7.ngAfterViewChecked
时机:每次做完组件视图和子视图的变更检测之后调用;在组件每次检查视图发生变更时调用。ngAfterViewInit和每次ngAfterContentChecked之后调用。
接口:AfterViewChecked;
适用范围:组件中
8.ngOnDestroy
时机:当 Angular 每次销毁指令 / 组件之前调用;在Angular销毁指令或组件之前做一些清理工作,比如退订可观察对象和移除事件处理器,以免导致内存泄漏。
接口:OnDestroy
适用范围:指令和组件中
代码演示案例
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-life-cycle', templateUrl: './life-cycle.component.html', styleUrls: ['./life-cycle.component.scss'] }) export class LifeCycleComponent implements OnInit { constructor() { } ngOnChanges() { console.log("ngOnChanges--当被绑定的输入属性(@input)的值发生变化时调用== 1") } ngOnInit() { console.log("ngOnInit--在第一轮 ngOnChanges 完成之后调用 == 2") } ngDoCheck () { console.log("ngDoCheck--在每个 Angular 变更检测周期中调用 == 3") } ngAfterContentInit () { console.log("ngAfterContentInit--当把内容投影进组件之后调用 == 4") } ngAfterContentChecked () { console.log("ngAfterContentChecked--每次完成被投影组件内容的变更检测之后调用 == 5") } ngAfterViewInit () { console.log("ngAfterViewInit--初始化完组件视图及其子视图之后调用 == 6") } ngAfterViewChecked () { console.log("ngAfterViewChecked--每次做完组件视图和子视图的变更检测之后调用 == 7") } ngOnDestroy () { console.log("ngOnDestroy--当 Angular 每次销毁指令 / 组件之前调用 == 8") } }
代码执行的顺序
ngOnInit--在第一轮 ngOnChanges 完成之后调用 == 2 ngDoCheck--在每个 Angular 变更检测周期中调用 == 3 ngAfterContentInit--当把内容投影进组件之后调用 == 4 ngAfterContentChecked--每次完成被投影组件内容的变更检测之后调用 == 5 ngAfterViewInit--初始化完组件视图及其子视图之后调用 == 6 ngAfterViewChecked--每次做完组件视图和子视图的变更检测之后调用 == 7 ngDoCheck--在每个 Angular 变更检测周期中调用 == 3 ngAfterContentChecked--每次完成被投影组件内容的变更检测之后调用 == 5 ngAfterViewChecked--每次做完组件视图和子视图的变更检测之后调用 == 7
小礼物走一波,支持作者
赏还没有人赞赏,支持一波吧