Angular 指令的生命週期,它是用來記錄指令從建立、應用及銷燬的過程。Angular 提供了一系列與指令生命週期相關的鉤子,便於咱們監控指令生命週期的變化,並執行相關的操做。Angular 中全部的鉤子以下圖所示:
數組
要實現生命週期鉤子,只需實現對應的接口便可,如實現ngOnChanges
鉤子只需實現OnChanges
接口便可:性能
export class XxxComponent implements OnInit, OnChanges, DoCheck, AfterContentInit, AfterContentChecked, AfterViewChecked, AfterViewInit, OnDestroy { // balabalabala... }
OnChanges只對輸入的不可變對象起做用。
輸入屬性之前說過,使用@Input
裝飾的屬性,這裏還須要注意不可變對象,在Angular中,典型的不可變對象是string
類型,但全部自定義對象均爲可變對象,如:user:{name:string}
,可變對象即便被定義爲輸入屬性,也不會觸發OnChanges
方法。code
ngOnChanges方法有一個SimpleChanges
類型的參數,它實際上是一個類型爲SimpleChange
,而且鍵值爲屬性名的數組:對象
export interface SimpleChanges { [propName: string]: SimpleChange; }
而SimpleChange
的結構以下:blog
export declare class SimpleChange { previousValue: any; currentValue: any; firstChange: boolean; constructor(previousValue: any, currentValue: any, firstChange: boolean); /** * Check whether the new value is the first value assigned. */ isFirstChange(): boolean; }
假如咱們的組件中有一個知足觸發OnChanges
鉤子條件的屬性名叫inputVal
,那麼能夠經過以下方式獲取它變化先後的值:接口
ngOnChanges(changes: SimpleChanges): void { console.log('ngOnChanges中inputVal變動前值爲:'+ changes['inputVal'].previousValue); console.log('ngOnChanges中inputVal變動後值爲:'+ changes['inputVal'].currentValue); }
在第一次 ngOnChanges 執行以後調用,而且只被調用一次。它主要用於執行組件的其它初始化操做或獲取組件輸入的屬性值。生命週期
當組件的輸入屬性發生變化時,將會觸發 ngDoCheck 方法。咱們可使用該方法,自定義咱們的檢測邏輯。事件
特別注意,使用時要比較精準的定義檢查位置,不然會形成性能問題,由於任何變化,好比鼠標的點擊事件或鍵盤的輸入事件都會觸發ngDoCheck
。input
在組件使用 ng-content 指令的狀況下,Angular 會在將外部內容放到視圖後用。它主要用於獲取經過 @ContentChild 或 @ContentChildren 屬性裝飾器查詢的內容視圖元素。string
在組件使用 ng-content 指令的狀況下,Angular 會在檢測到外部內容的綁定或者每次變化的時候調用。
在組件相應的視圖初始化以後調用,它主要用於獲取經過 @ViewChild 或 @ViewChildren 屬性裝飾器查詢的視圖元素。
組件每次檢查視圖時調用
在指令被銷燬前,將會調用 ngOnDestory 方法。它主要用於執行一些清理操做,好比:移除事件監聽、清除定時器、退訂 Observable 等。