每個元件都有一個被 Angular 管理的生命週期。Angular 建立它,渲染它,建立並渲染它的子元件,在它被繫結的屬性發生變化時檢查它,並在它從 DOM 中被移除前銷燬它。Angular 提供了生命週期鉤子,開發者可以介入該生命週期中的這些關鍵時刻。除了那些元件內容和檢視相關的鉤子外,指令有相同生命週期鉤子。
生命週期概覽
每個介面(介面是可選的)都有唯一的一個鉤子方法,它們的名字是由介面名再加上 ng 字首構成的。當 Angular 使用建構函式新建一個元件或指令後,就會按下面的順序在特定時刻呼叫這些生命週期鉤子方法:
鉤子 | 用途及時機 |
---|---|
ngOnChanges() | 當 Angular(重新)設定資料繫結輸入屬性時響應。 該方法接受當前和上一屬性值的 SimpleChanges 物件在 ngOnInit() 之前以及所繫結的一個或多個輸入屬性的值發生變化時都會 呼叫。 |
ngOnInit() | 在 Angular 第一次顯示資料繫結和設定指令/元件的輸入屬性之後,初始化指令/元件。在第一輪 ngOnChanges() 完成之後呼叫,只呼叫一次 。 |
ngDoCheck() | 檢測,並在發生 Angular 無法或不願意自己檢測的變化時作出反應。在每個變更檢測週期中,緊跟在 ngOnChanges() 和 ngOnInit() 後面呼叫。 |
ngAfterContentInit() | 沒當 Angular 把外部內容投影進元件/指令的檢視之後呼叫。第一次 ngDoCheck() 之後呼叫,只呼叫一次 。 |
ngAfterContentChecked() | 每當 Angular 完成被投影元件內容的變更檢測之後呼叫。ngAfterContentInit() 和每次 ngDoCheck() 之後呼叫 |
ngAfterViewInit() | 每當 Angular 初始化完元件檢視及其子檢視之後呼叫。第一次 ngAfterContentChecked() 之後呼叫,只呼叫一次 。 |
ngAfterViewChecked() | 每當 Angular 做完元件檢視和子檢視的變更檢測之後呼叫。ngAfterViewInit() 和每次 ngAfterContentChecked() 之後呼叫。 |
ngOnDestroy() | 沒當 Angular 每次銷燬指令/元件之前呼叫並清掃。 在這兒反訂閱可觀察物件和分離事件處理器,以防記憶體洩漏。在 Angular 銷燬指令/元件之前呼叫。 |