最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Angular組件之生命周期(二)

 更新時間:2021年05月24日 09:14:25   作者:starof  
Angular本身監(jiān)督所有Angular組件和指令的生命周期 。為了在開發(fā)應用程序時順利進行,您必須了解結果的生命周期。組件是任何Angular應用程序的主要構建塊。因此,必須了解它們才能理解組件生命周期的處理步驟。只有這樣才能在應用程序的開發(fā)中實現(xiàn)。

一、view鉤子

view鉤子有2個,ngAfterViewInit和ngAfterViewChecked鉤子。

1、實現(xiàn)ngAfterViewInit和ngAfterViewChecked鉤子時注意事項

以父組件調用子組件方法中例子為基礎,在父組件中實現(xiàn)ngAfterViewInit和ngAfterViewChecked鉤子。

這兩個鉤子是在組件的模版所有內容組裝完成后,組件模版已經呈現(xiàn)給用戶看了,之后這兩個鉤子方法會被調用。

@ViewChild('child1')
child1:Child1Component; //父組件中獲得子組件的引用

ngOnInit(){
  this.child1.greeting("Tom");
}

ngAfterViewInit(){
  console.log("父組件的視圖初始化完畢");
}

ngAfterViewChecked(){
  console.log("父組件的視圖變更檢測完畢");
}

在子組件中也實現(xiàn)這兩個鉤子

export class Child1Component implements OnInit,AfterViewInit,AfterViewChecked{

  constructor() { }

  ngOnInit() {
  }

  greeting(name: string) {
    console.log("hello" + name);
  }

  ngAfterViewInit(){
    console.log("子組件的視圖初始化完畢");
  }
  
  ngAfterViewChecked(){
    console.log("子組件的視圖變更檢測完畢");
  }
}

在父組件的ngOnInit中不直接調用子組件的greeting()方法,而是通過一個定時器每隔5s去調用一次。

ngOnInit(){
  setInterval(()=>{
    this.child1.greeting("Tom");
  },5000);
}

總結:

1、Init先調用,checked后調用

看1中,首先子組件視圖初始化完畢,然后子組件視圖變更檢測完畢。

2、子組件先于父組件被組裝好

看2中,因為父組件中聲明了2個子組件,所以看到有2個子組件 初始化的動作。1號子組件初始化完畢,變更檢測完畢,2號子組件初始化完畢,變更檢測完畢后,父組件的初始化完畢才會被調用,然后父組件的變更檢測完畢才會被調用。

3、ngAfterViewInit只會在初始化完畢被調用一次。

4、定時器觸發(fā)方法后,兩個子組件的變更檢測會被調用,父組件的變更檢測也會被調用。

視圖沒有發(fā)生任何改變,變更檢測也會被調用,實現(xiàn)來ngAfterViewChecked()鉤子的方法都會被調用。

所以ngAfterViewChecked()鉤子一定要寫的精簡以免出現(xiàn)性能問題。

2、在一個變更檢測周期中禁止一個視圖被組裝好之后再去更新視圖

例子:

父組件

有一個message初始化為abc.顯示到模版上。

message:string='abc';

在父組件的ngAfterViewInit中更改message值。

ngAfterViewInit(){
  console.log("父組件的視圖初始化完畢");
  this.message="def";
}

會報錯。ngAfterViewInit()和ngAfterViewChecked()都是在視圖組裝完成后觸發(fā)的,所以在這兩個鉤子中更新組件中被綁定的屬性,觸發(fā)組件視圖的變化,Angular就會拋出異常。

解決辦法:

把代碼放在另一個時間循環(huán)里面。

ngAfterViewInit(){
  console.log("父組件的視圖初始化完畢");
  setTimeout(()=>{
    this.message="def";
  },0);
}

二、content鉤子

包括2個與投影相關的鉤子,ngAfterContentInit()和ngAfterContentChecked()鉤子。

ngAfterContentInit,ngAfterContentChecked和ngAfterViewInit,ngAfterViewChecked類似。

ngAfterViewInit,ngAfteViewChecked是在整個組件的視圖全部組裝完成后調用的。

ngAfterContentInit,ngAfterContentChecked是在被投影進來的內容組裝完成后調用的。

1、Content鉤子的調用順序例子

父組件中實現(xiàn)ngAfterContentInit,ngAfterContentChecked和ngAfterContentInit()

export class AppComponent implements OnInit, AfterViewInit, AfterContentInit,AfterContentChecked{

ngAfterViewInit(){
  console.log("父組件的視圖初始化完畢");
}

ngAfterContentInit(){
  console.log("父組件投影內容初始化完畢");
}
ngAfterContentChecked(){
  console.log("父組件投影內容變更檢測完畢");
}

子組件中也實現(xiàn)這3個接口

export class Child2Component implements OnInit,AfterViewChecked,AfterContentInit,AfterContentChecked{

  constructor() { }

  ngOnInit() {
  }
  ngAfterViewInit(){
    console.log("子組件的視圖初始化完畢");
  }
  
  ngAfterContentInit(){
    console.log("子組件投影內容初始化完畢");
  }
  ngAfterContentChecked(){
    console.log("子組件投影內容變更檢測完畢");
  }
}

組裝視圖時,先組裝投影進來的內容,然后組裝子組件中視圖的內容,再加上父組件本身的內容,然后才是父組件視圖初始化完畢。

2、Content鉤子中可以修改模版內容

view鉤子里不能修改模版內容,因為模版內容組裝完畢后不能再修改里面內容。但是Content鉤子里可以。

因為Content鉤子調用時整個視圖還沒有組裝完畢,只是投影進來的內容被組裝完畢了。

父組件中在ngAfterContentInit鉤子里修改message信息不會報錯。

export class AppComponent implements OnInit, AfterViewInit, AfterContentInit,AfterContentChecked{
message:string='abc';
ngAfterViewInit(){
  console.log("父組件的視圖初始化完畢");
}

ngAfterContentInit(){
  console.log("父組件投影內容初始化完畢");
  this.message='def';
}
ngAfterContentChecked(){
  console.log("父組件投影內容變更檢測完畢");
}
ngOnInit(){

}

三、總結

上面四個方法在屬性初始化階段:構造函數(shù)是初始化對象,ngOnChanges是初始化輸入屬性,ngOnInit是初始化除了輸入屬性以外其它的所有屬性,ngDoCheck是做一次變更檢查。

這四個方法執(zhí)行完整個組件所有屬性都被賦予了應該被賦的值。

組件開始渲染它的視圖,首先渲染投影進來的內容,投影進來的內容渲染完調用ngAfterContentInit和ngAfterContentChecked鉤子方法。

如果有子組件會調子組件創(chuàng)建的過程,子組件創(chuàng)建完或者沒有子組件,整個組件的視圖都初始化完畢了以后,會調ngAfterViewInit和ngAfterViewChecked鉤子方法。

至此,整個組件初始化完畢,組件會呈現(xiàn)給用戶交互。

用戶交互觸發(fā)Angular的變更檢測機制,檢測到發(fā)生了變更,在當前組件樹上所有活動組件上被實現(xiàn)的帶有check的鉤子方法都會被調用,用來檢查當前組件的變化,如果變化導致某個組件的輸入屬性也改變了,那個組件的ngOnChanges也會被調用。

組件在路由地址變化從而被銷毀的時候會調ngOnDestory()。

在ngOnDestory中銷毀一些引用的資源,比如反訂閱一個流,清除定時器之類的。

以上就是詳解Angular組件之生命周期(二)的詳細內容,更多關于Angular的資料請關注腳本之家其它相關文章!

相關文章

  • 淺談angularjs module返回對象的坑(推薦)

    淺談angularjs module返回對象的坑(推薦)

    下面小編就為大家?guī)硪黄獪\談angularjs module返回對象的坑(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 使用angularjs創(chuàng)建簡單表格

    使用angularjs創(chuàng)建簡單表格

    AngularJS提供豐富填寫表單和驗證。我們可以用ng-click來處理AngularJS點擊按鈕事件,然后使用 $dirty 和 $invalid標志做驗證的方式。使用novalidate表單聲明禁止任何瀏覽器特定的驗證。下面我們來看看如何使用angularjs創(chuàng)建簡單表格
    2016-01-01
  • 簡單講解AngularJS的Routing路由的定義與使用

    簡單講解AngularJS的Routing路由的定義與使用

    這篇文章主要介紹了AngularJS的Routing路由的定義與使用,講解了when()和otherwise()兩個相關的常用方法,需要的朋友可以參考下
    2016-03-03
  • 解析Angular 2+ 樣式綁定方式

    解析Angular 2+ 樣式綁定方式

    這篇文章主要介紹了解析Angular 2+ 樣式綁定方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 如何在Angular2中使用jQuery及其插件的方法

    如何在Angular2中使用jQuery及其插件的方法

    本篇文章主要介紹了如何在Angular2中使用jQuery及其插件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 詳解AngularJs路由之Ui-router-resolve(預加載)

    詳解AngularJs路由之Ui-router-resolve(預加載)

    本篇文章主要介紹了詳解AngularJs路由之Ui-router-resolve(預加載),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Angular服務Request異步請求的實例講解

    Angular服務Request異步請求的實例講解

    今天小編就為大家分享一篇Angular服務Request異步請求的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • angular中默認路由的理解用法詳解

    angular中默認路由的理解用法詳解

    這篇文章主要介紹了angular中的默認路由的用法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Angular頁面間切換及傳值的4種方法

    Angular頁面間切換及傳值的4種方法

    這篇文章主要為大家詳細介紹了Angular頁面間切換及傳值的四種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Angular.JS中的指令引用template與指令當做屬性詳解

    Angular.JS中的指令引用template與指令當做屬性詳解

    這篇文章主要介紹了Angular.JS中的指令引用template與指令當做屬性的相關資料,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03

最新評論

安图县| 招远市| 邳州市| 南澳县| 客服| 台北县| 宜黄县| 荔波县| 三门县| 阿城市| 灵丘县| 芒康县| 普定县| 浏阳市| 黑河市| 且末县| 台北市| 锦州市| 汉中市| 永春县| 中牟县| 常山县| 云林县| 庆阳市| 泾源县| 六枝特区| 酒泉市| 江都市| 尼玛县| 台安县| 汉寿县| 邵阳县| 慈溪市| 丹寨县| 新疆| 福鼎市| 嘉荫县| 高要市| 龙口市| 得荣县| 阿合奇县|