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

淺談對Angular中的生命周期鉤子的理解

 更新時間:2017年07月31日 09:05:01   作者:玉鴦  
本篇文章主要介紹了Angular中的生命周期鉤子的理解,詳細(xì)的介紹了生命周期鉤子和主要的生命周期鉤子,有興趣的可以了解一下

本文介紹了Angular中的生命周期鉤子的理解,分享給大家,希望對大家有所幫助

什么是生命周期鉤子

簡單點來說生命周期鉤子就是Angular中一個組件從被創(chuàng)建當(dāng)銷毀期間的一些有意義的關(guān)鍵時刻.這些關(guān)鍵時刻在Angular中被Angular核心模塊 @angular/core 暴露出來,賦予了我們在它們發(fā)生時采取行動的能力.

有哪些生命周期鉤子

Angular中從一個組件的創(chuàng)建到銷毀一個有八個生命周期鉤子它們,按照先后順序.它們分別是:

  1. ngOnChanges()
  2. ngOnInit()
  3. ngDoCheck()
  4. ngAfterContentInit()
  5. ngAfterContentChecked()
  6. ngAfterViewInit()
  7. ngAfterViewChecked()
  8. ngOnDestroy()

其中: ngOnInit() 、 ngAfterContentInit() 、 ngAfterViewInit() 和 ngOnDestroy() 在一個組件的生命周期中只會被調(diào)用一次,其它的都有可能會被多次調(diào)用.下面,就讓我們來詳細(xì)解列一下這些生命周期鉤子.

ngOnChanges()

  • 當(dāng)Angular(重新)設(shè)置數(shù)據(jù)綁定輸入屬性時響應(yīng)。 該方法接受當(dāng)前和上一屬性值的SimpleChanges對象
  • 當(dāng)被綁定的輸入屬性的值發(fā)生變化時調(diào)用,首次調(diào)用一定會發(fā)生在ngOnInit()之前。

ngOnChanges() 生命周期的調(diào)用與一個組件中的輸入屬性有關(guān).

當(dāng)在一個組件中使用 @Input() 定義了一個輸入屬性時.只要這個輸入屬性的值發(fā)生了改變.就會觸發(fā) ngOnChanges() 生命周期鉤子.這個生命周期鉤子被調(diào)用時會傳入一個 SimpleChanges 對象,這個對象中包含了輸入屬性當(dāng)前值和上一值.

@Input()
public name: string;

ngOnChanges(changes: SimpleChanges): void {
 console.log(changes); // name:SimpleChange {previousValue: "a", currentValue: "ab", firstChange: false}
}

上面是我定義了一個輸入屬性 name 并將從 a 它改為 ab 之后的打印結(jié)果,可能你還注意到了打印的結(jié)果中還有一個 firstChange 屬性.它是一個Booleans,表明你是否是第一次改變.

同時,還有一點需要注意:你的輸入屬性定義為你引用類型和基本類型的時候其表現(xiàn)結(jié)果是不同的.當(dāng)你的輸入屬性是基本類型時.你的每一次改變都會觸發(fā) ngOnChanges() 生命周期鉤子,而當(dāng)你的輸入屬性是引用類型時,你改變你引用類型 當(dāng)中 的屬性時,并不會觸發(fā) ngOnChanges() 生命周期鉤子.只有當(dāng)你將你引用類型數(shù)據(jù)的指針指向另一塊內(nèi)存地址的時候才會觸發(fā) ngOnChanges() 生命周期鉤子.

ngOnInit()

  • 在Angular第一次顯示數(shù)據(jù)綁定和設(shè)置指令/組件的輸入屬性之后,初始化指令/組件。
  • 在第一輪ngOnChanges()完成之后調(diào)用,只調(diào)用一次。

ngOnInit() 是一個組件的生命周期中一定存在的一個鉤子.它在一個組件被初始化的時候被調(diào)用.在這個期間,你可以執(zhí)行一些相應(yīng)的數(shù)據(jù)綁定操作.

ngDoCheck()

  • 檢測,并在發(fā)生Angular無法或不愿意自己檢測的變化時作出反應(yīng)。
  • 在每個Angular變更檢測周期中調(diào)用,ngOnChanges()和ngOnInit()之后。

ngDoCheck() 是Angular中的變更檢測機(jī)制.它由 zone.js 來實現(xiàn)的.其行為是只要你的Angular中的某個組件發(fā)生異步事件.就會檢查整個組件樹,以保證組件屬性的變化或頁面的變化是同步的.所以 ngDoCheck() 的觸發(fā)相當(dāng)頻繁的.并且是我們無法預(yù)料到的.也許我們在頁面上的一個無意識操作,就會觸發(fā)幾個甚至幾十個的 ngDoCheck() 生命周期鉤子.

所以我們在使用 ngDoCheck() 生命周期鉤子的時候一定要加上判斷.以避免無用的觸發(fā)干擾我們.

ngAfterContentInit()

  • 當(dāng)把內(nèi)容投影進(jìn)組件之后調(diào)用。
  • 第一次ngDoCheck()之后調(diào)用,只調(diào)用一次。
  • 只適用于組件。

當(dāng)父組件向子組件投影內(nèi)容的時.在子組件內(nèi)會初始化父組件的投影內(nèi)容,此時會調(diào)用 ngAfterContentInit() 生命周期鉤子.在整個組件生命周期中 ngAfterContentInit() 生命周期鉤子只會調(diào)用一次.如下所示:

// 父組件
<app-child>
 <p>我是父組件向子組件的投影內(nèi)容</>
</app-child>


// 子組件 ChildComponent
<div>
 //接受父組件的投影內(nèi)容
 <ng-content></ng-content>
</div>

ngAfterContentChecked()

  • 每次完成被投影組件內(nèi)容的變更檢測之后調(diào)用。
  • ngAfterContentInit()和每次ngDoCheck()之后調(diào)用
  • 只適合組件。

當(dāng)父組件向子組件的投影內(nèi)容發(fā)生改變時會調(diào)用 ngAfterContentChecked() 生命周期鉤子.它與 ngDoCheck() 類似.當(dāng)投影內(nèi)容發(fā)生改變時,就會執(zhí)行變更檢查機(jī)制.同時調(diào)用 ngAfterContentChecked() 生命周期鉤子.此外.還有一點:當(dāng)父組件和子組件都有投影內(nèi)容時,會先執(zhí)行父組件的生命周期鉤子.它與下面要說的 ngAfterViewInit() 和 ngAfterViewChecked() 相反.

ngAfterViewInit()

  • 初始化完組件視圖及其子視圖之后調(diào)用。
  • 第一次ngAfterContentChecked()之后調(diào)用,只調(diào)用一次。
  • 只適合組件。

當(dāng)其組件本身和所有的子組件渲染完成,已經(jīng)呈現(xiàn)在頁面上時,調(diào)用 ngAfterViewInit() 生命周期鉤子.在整個組件生命周期中 ngAfterViewInit() 生命周期鉤子只會調(diào)用一次.

ngAfterViewChecked()

  • 每次做完組件視圖和子視圖的變更檢測之后調(diào)用。
  • ngAfterViewInit()和每次ngAfterContentChecked()之后調(diào)用。
  • 只適合組件。

當(dāng)組件及其子組件的視圖發(fā)生改變時,執(zhí)行完變更檢查機(jī)制后調(diào)用.當(dāng)父組件和子組件都發(fā)生視圖變化時,會先執(zhí)行子組件的生命周期鉤子.

注意:這里所說的視圖發(fā)生改變不一定是真正頁面上的變化.只是Angular種所認(rèn)為的視圖變化.因為Angular本身并不能察覺到頁面上顯示的視圖.所以在Angular認(rèn)為,只要你在后臺定義的屬性發(fā)生了改變,就是視圖有了變化.從而就會調(diào)用 ngAfterViewChecked() 生命周期鉤子.

ngOnDestroy

  • 當(dāng)Angular每次銷毀指令/組件之前調(diào)用并清掃。 在這兒反訂閱可觀察對象和分離事件處理器,以防內(nèi)存泄漏。
  • 在Angular銷毀指令/組件之前調(diào)用。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 監(jiān)聽angularJs列表數(shù)據(jù)是否渲染完畢的方法示例

    監(jiān)聽angularJs列表數(shù)據(jù)是否渲染完畢的方法示例

    前端在做數(shù)據(jù)渲染的時候經(jīng)常會遇到在數(shù)據(jù)渲染完畢后執(zhí)行某些操作,這篇文章主要介紹了監(jiān)聽angularJs列表數(shù)據(jù)是否渲染完畢的方法示例,非常具有實用價值,需要的朋友可以參考下
    2018-11-11
  • 對angularJs中2種自定義服務(wù)的實例講解

    對angularJs中2種自定義服務(wù)的實例講解

    今天小編就為大家分享一篇對angularJs中2種自定義服務(wù)的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 微信+angularJS的SPA應(yīng)用中用router進(jìn)行頁面跳轉(zhuǎn),jssdk校驗失敗問題解決

    微信+angularJS的SPA應(yīng)用中用router進(jìn)行頁面跳轉(zhuǎn),jssdk校驗失敗問題解決

    本文主要介紹微信+angularJS的SPA應(yīng)用中用router進(jìn)行頁面跳轉(zhuǎn),jssdk校驗失敗問題解決,這里提供了詳細(xì)的操作方式,有需要的小伙伴可以參考下
    2016-09-09
  • 深入淺析AngularJS中的module(模塊)

    深入淺析AngularJS中的module(模塊)

    我們所說的模塊,是你的AngularJS應(yīng)用程序的一個組成部分,它可以是一個Controller,也可以是一個Service服務(wù),也可以是一個過濾器(Filter),也可以是一個directive(指令)等等…都是屬于一個模塊,本文給大家介紹AngularJS中的module(模塊) ,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • angularjs實現(xiàn)首頁輪播圖效果

    angularjs實現(xiàn)首頁輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了angularjs實現(xiàn)首頁輪播圖效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Angular?模塊封裝概念常見的錯誤分析理解

    Angular?模塊封裝概念常見的錯誤分析理解

    這篇文章主要為大家介紹了Angular模塊封裝概念常見的錯誤分析理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • AngularJS入門教程之AngularJS表達(dá)式

    AngularJS入門教程之AngularJS表達(dá)式

    AngularJS應(yīng)用表達(dá)式是純javascript表達(dá)式,并輸出它們被使用的數(shù)據(jù)在那里。本文給大家介紹AngularJS入門教程之AngularJS表達(dá)式,對angularjs表達(dá)式相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • angularJS Provider、factory、service詳解及實例代碼

    angularJS Provider、factory、service詳解及實例代碼

    這篇文章主要介紹了angularJS Provider詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • ANGULARJS中用NG-BIND指令實現(xiàn)單向綁定的例子

    ANGULARJS中用NG-BIND指令實現(xiàn)單向綁定的例子

    這篇文章主要介紹了ANGULARJS中用NG-BIND指令實現(xiàn)單向綁定的例子,本文簡單介紹AngularJS框架后,用一個實例演示{{}}插值法和ng-bind指令的使用,需要的朋友可以參考下
    2014-12-12
  • Angularjs上傳圖片實例詳解

    Angularjs上傳圖片實例詳解

    上傳圖片需要引入插件ngFileUpload,使用bower安裝方法,下面通過本文給大家介紹Angularjs上傳圖片實例詳解,希望對大家有所幫助
    2017-08-08

最新評論

大新县| 视频| 且末县| 恩平市| 会东县| 罗城| 丰宁| 云安县| 登封市| 敦化市| 抚远县| 西安市| 蒙自县| 长武县| 海门市| 固安县| 克拉玛依市| 揭东县| 冀州市| 湖北省| 宁武县| 洪江市| 扎鲁特旗| 岳普湖县| 宣汉县| 南投市| 襄城县| 五家渠市| 商丘市| 宝鸡市| 临汾市| 鄱阳县| 丰都县| 临江市| 成武县| 峨眉山市| 恭城| 杭锦旗| 日照市| 威远县| 安西县|