Angular學習二--生命週期

1.生命週期鉤子函數

  1. ngOnchanges :當被綁定的輸入屬性的值發生變化時調用,首次調用必定會發生在ngOnInit以前。 範圍:指令和組件 ,接口名稱: OnChanges數組

    #1.ngOnchanges 在父組件(初始化或修改)子組件的輸入參數下調用, 用在有輸入屬性的子組件瀏覽器

    用處:當Angular設置數據綁定輸入屬性發生變化時響應.異步

    時機: 當被綁定的輸入屬性的值發生變化時調用,不過首次調用是會發生在ngOnInit()以前的函數

    ngOnChanges() 方法獲取了一個對象,它能夠同時觀測1個/多個綁定的屬性值,它把每一個發生變化的屬性名都映射到了一個SimpleChange對象,該對象中有屬性的當前值和前一個值code

    觸發條件:對象

    @input屬性(輸入屬性)發生變化時,會調用.非此屬性,不會調用接口

    當輸入屬性對象時,當對象的屬性值發生變化時,不會調用,當對象的引用變化時觸發生命週期

    輸入屬性,使用@input 裝飾的屬性,這裏還須要注意不可變對象,在angular中,典型的不可變對象是string類型,但全部的自定義對象均爲可變對象, 如user:{name : string } ,可變對象即便被定義爲輸入屬性,也不會觸發OnChanges方法,當修改子組件參數時,只有如下狀況ngOnchanges纔會被調用事件

    輸入屬性@input()屬性內存

    不可變對象: undefined , null , boolean ,number , string

    可變對象:對象(包括數組和函數)

    可變對象

    var greeting = 'hello'

    greeting = 'hello world'

    greeting的值發生改變,由於其指向的字符串地址從hello指向了hello world

    不可變對象

    var user = { name :Tom }

    user.name = 'Jim'

    user的指向的內存地址並無改變,改變的是user對象中的name屬性 ngOnChanges鉤子接收一個類型爲SimpleChange 的映射對象,包括新值和舊值

  2. ngOnInit 在第一輪ngOnChanges完成以後調用,發生於構造函數以後,用於初始化指令/組件,注意用於數據綁定的屬性處理。

    範圍:指令和組件 , 接口名稱: OnInit

開發業務中咱們常常在ngOnInit 作一些初始化的工做,而這些工做盡可能要避免在constructor中進行,constructor 中應該只進行依賴注入而不是進行真正的業務操做

  1. ngDoCheck 在每一個Angular變動檢測週期中調用,用於變動的檢測

    範圍:指令和組件 接口名稱:DoCheck

Angular的變動檢測機制配合zone.js來實現,保證組件變化和頁面變化同步,瀏覽器中任何異步事件都會觸發檢測機制 , 檢測模板全部綁定屬性,若改變則相應區域會被更新。 須要注意的是:變動檢測機制只會把組件屬性的改變反應到模板上,不會改變組件值

  1. ngAfterContentInit 當把內容投影進組件以後調用。

    範圍:組件 , 接口:AfterContentInit

  2. ngAfterContentChecked 每次完成被投影組件內容的變動檢測以後調用。

    範圍:組件 , 接口: AfterContentChecked

  3. ngAfterViewInit: 初始化完組件視圖及其子視圖以後調用

    範圍:組件 , 接口:AfterViewInit

  4. ngAfterViewChecked 每次作完組件視圖喝子視圖的變動檢測以後調用

    範圍:組件 , 接口 : AfterViewChecked

  5. ngOnDestroy 當Angular每次銷燬指令/組件以前調用

    範圍:指令和組件 , 接口:OnDestroy

相關文章
相關標籤/搜索