溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

淺談angular2 組件的生命周期鉤子

發(fā)布時(shí)間:2020-08-23 20:52:23 來源:腳本之家 閱讀:161 作者:肥飛貓的專欄 欄目:web開發(fā)

本文介紹了淺談angular2 組件的生命周期鉤子,分享給大家,具體如下:

按照生命周期執(zhí)行的先后順序,Angular生命周期接口如下所示

名稱

時(shí)機(jī)

接口

范圍

ngOnChanges

當(dāng)被綁定的輸入屬性的值發(fā)生變化時(shí)調(diào)用,首次調(diào)用一定會(huì)發(fā)生在 ngOnInit之前。

OnChanges

指令和組件

ngOnInit

在第一輪 ngOnChanges 完成之后調(diào)用。 ( 譯注:也就是說當(dāng)每個(gè)輸入屬性的值都被觸發(fā)了一次 ngOnChanges之后才會(huì)調(diào)用 ngOnInit ,此時(shí)所有輸入屬性都已經(jīng)有了正確的初始綁定值 )

OnInit

指令和組件

ngDoCheck

在每個(gè) Angular 變更檢測(cè)周期中調(diào)用。

DoCheck

指令和組件

ngAfterContentInit

當(dāng)把內(nèi)容投影進(jìn)組件之后調(diào)用。

AfterContentInit

組件

ngAfterContentChecked

每次完成被投影組件內(nèi)容的變更檢測(cè)之后調(diào)用。

AfterContentChecked

組件

ngAfterViewInit

初始化完組件視圖及其子視圖之后調(diào)用。

after initializing the component's views and child views.

AfterViewInit

組件

ngAfterViewChecked

每次做完組件視圖和子視圖的變更檢測(cè)之后調(diào)用。

AfterViewChecked

組件

ngOnDestroy

當(dāng) Angular 每次銷毀指令 /組件之前調(diào)用。

OnDestroy

指令和組件

生命周期順序簡(jiǎn)寫

在Angular通過構(gòu)造函數(shù)創(chuàng)建組件/指令時(shí),它調(diào)用這些生命周期鉤子方法的順序是:

  • ngOnChanges:在ngOnInit之前,當(dāng)數(shù)據(jù)綁定輸入屬性的值發(fā)生變化時(shí)。
  • ngOnInit:在第一次ngOnChanges之后。
  • ngDoCheck:每次Angular變化檢測(cè)時(shí)。
  • ngAfterContentInit:在外部?jī)?nèi)容放到組件內(nèi)之后。
  • ngAfterContentChecked:在放到組件內(nèi)的外部?jī)?nèi)容每次檢查之后。
  • ngAfterViewInit:在初始化組件視圖和子視圖之后。
  • ngAfterViewChecked:在妹子組件視圖和子視圖檢查之后。
  • ngOnDestroy:在Angular銷毀組件/指令之前。

除此之外,一些組件還提供了自己的生命周期鉤子。例如router有routerOnActivate。

淺談angular2 組件的生命周期鉤子

測(cè)試生命周期順序的代碼

import {Component} from '@angular/core';
import {bootstrap} from '@angular/platform-browser-dynamic';

@Component({
 selector: 'panel',
 inputs: ['title', 'caption'],
 template: '<ng-content></ng-content>'
})
class Panel {
 // 組件輸入屬性值發(fā)生改變(首次調(diào)用一定會(huì)發(fā)生在 ngOnInit之前。)
 ngOnChanges(changes) {
  console.log('On changes', changes);
 }
 // 組件初始化完成(在第一輪 ngOnChanges 完成之后調(diào)用。 ( 譯注:也就是說當(dāng)每個(gè)輸入屬性的值都被觸發(fā)了一次 ngOnChanges 之后才會(huì)調(diào)用 ngOnInit ,此時(shí)所有輸入屬性都已經(jīng)有了正確的初始綁定值 ))
 ngOnInit() {
  console.log('Initialized');
  console.warn('OnChanges和DoCheck鉤子不要同時(shí)出現(xiàn),互斥!。本例僅供學(xué)習(xí)');
 }
 // 臟值檢測(cè)器被調(diào)用后調(diào)用
 ngDoCheck() {
  console.log('Do check');
 }
 // 組件銷毀之前
 ngOnDestroy() {
  console.log('Destroy');
 }
 // 組件-內(nèi)容-初始化完成 PS:指的是ContentChild或者Contentchildren
 ngAfterContentInit() {
  console.log('After content init');
 }
 // 組件內(nèi)容臟檢查完成
 ngAfterContentChecked() {
  console.log('After content checked');
 }
 // 組件視圖初始化完成 PS:指的是ViewChild或者ViewChildren
 ngAfterViewInit() {
  console.log('After view init');
 }
 // 組件視圖臟檢查完成之后
 ngAfterViewChecked() {
  console.log('After view checked');
 }
}

@Component({
 selector: 'app',
 template: `
  <button (click)="toggle()">Toggle</button>
  <div *ngIf="counter % 2 == 0">
   <panel caption="Sample caption" title="Sample">Hello world!</panel>
  </div>
 `,
 directives: [Panel]
})
class App {
 counter: number = 0;
 toggle() {
  this.counter += 1;
 }
}

bootstrap(App);

輸出結(jié)果

淺談angular2 組件的生命周期鉤子

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI