中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Angular組件中生命周期鉤子的示例分析

發布時間:2021-04-26 11:41:56 來源:億速云 閱讀:174 作者:小新 欄目:web開發

這篇文章主要介紹了Angular組件中生命周期鉤子的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Angular 組件生命周期鉤子


Angular組件中生命周期鉤子的示例分析

其中,紅色標記的生命周期鉤子只調用一次,綠色部分會被反復調用,執行順序依次由上而下。

ngOnChanges

當 Angular 設置數據綁定輸入屬性發生變化時響應,只對輸入的不可變對象起作用。簡單地講就是,@Input 標記的屬性發生變化的時候被調用,非 @Input 標記的屬性改變不會調用 ngOnChanges。

ngOnInit

在第一次 ngOnChanges 執行之后調用,并且只被調用一次。它主要用于執行組件的其它初始化操作或獲取組件輸入的屬性值。

ngDoCheck

組件的輸入屬性發生變化時,將會觸發 ngDoCheck 方法,我們可以使用該方法,自定義我們的檢測邏輯。【相關推薦:《angular教程》】

注意: 不要在 ngDoCheck 里面做非常復雜的事情,使用時要比較精準的定義檢查位置,否則會造成性能問題。因為任何變化,比如鼠標的點擊事件或鍵盤的輸入事件都會觸發 ngDoCheck。

變更檢測

Angular組件中生命周期鉤子的示例分析

變更檢測策略

  • Default 策略
    當組件樹中有任何一個組件發生改變時,整個組件樹都會被檢測一遍。

  • onPush 策略
    當一個組件發生改變時,如果其子組件使用的是 onPush 策略,則不會對其進行檢測。只有在子組件的 @Input 輸入屬性發生改變時,才會進行檢測。

ngAfterViewInit 和 ngAfterViewChecked

ngAfterViewInit 和 ngAfterViewChecked 鉤子會在組件的模板的所有內容被裝配完畢,組件的模板已經呈現給用戶后被觸發,裝配過程是從子組件向父組件依次進行,而且 ngAfterViewInit 在 ngAfterViewChecked 之前被觸發。

ngAfterViewInit 鉤子只會在組件初始化完畢后被觸發一次,而 ngAfterViewChecked 鉤子在組件變更時都會被觸發,所以此鉤子的實現一定要精簡,不然會引起性能問題。

在這兩個鉤子里面不能再修改組件上被綁定的屬性,否則會拋出異常。

@ViewChild 裝飾器和 ElementRef 元素參閱

在實際應用中,可通過這個兩個元素獲取視圖層的 DOM 元素,對獲取的 DOM 元素進行操作。

// .ts 文件中聲明
@ViewChild('inputElem')
inputElem: ElementRef;
// 獲取Dom元素的值
const value = this.inputElem.nativeElement.value;

// .html 文件中使用
<input nz-input type="text" #inputElem>

ngAfterContentInit 和 ngAfterContentChecked

這兩個鉤子是在投影內容裝配完成之后執行的,而那個時候整個模板還沒有裝配完成,所以在這兩個鉤子里面可以修改被綁定的屬性。

投影

在某些情況下,需要動態改變組件模板的內容,而這些內容沒有復雜的業務邏輯,也不需要重用,只是一小部分 HTML 片段,這個時候可以使用 Angular 提供的一個特性,叫做投影。在 Angular 里面可以使用 ng-content 指令將父組件模板中的任意片段投影到它的子組件上。

需要注意的是,自定義的組件的標簽內部是不可以嵌套其他標簽的,它不像一般的 HTML 標簽可以嵌套,但可以使用投影實現嵌套。

app.component.html

<div class="wrapper">
  <h2>我是父組件</h2>
  <div>這個 div 定義在父組件</div>
  <!-- 將要投影的內容寫在子組件的標簽之間 -->
  <app-child>
    <div class="header">這個是頁頭。這個 div 是父組件投影到子組件的。</div>
    <div class="footer">這個是頁腳。</div>
  </app-child>
</div>

child.component.html

<div class="wrapper">
  <h2>這是子組件</h2>
  <!-- ng-content是投影點 -->
  <ng-content select=".header"></ng-content>
  <div>這個div定義在子組件中</div>
  <ng-content select=".footer"></ng-content>
</div>

其中,使用 select 屬性可以實現針對性的內容投影。但是,需要注意的是,select 屬性對應的值所指定的標簽節點必須是組件下的直接子節點。否則,select屬性無效。

ngAfterContentInit 和 ngAfterContentChecked 小結

  • ngAfterContentInit 和 ngAfterContentChecked 鉤子在組件要投影的內容裝配完畢以后才會被觸發,ngAfterContentInit 在 ngAfterContentChecked 之前被觸發。

  • 如果組件有子組件,父組件的這兩個鉤子先被觸發,子組件的這兩個鉤子在父組件投影內容裝配完畢后觸發。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Angular組件中生命周期鉤子的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉水县| 栾川县| 铅山县| 鸡东县| 荣昌县| 筠连县| 张家界市| 澄迈县| 彭山县| 潮安县| 祁门县| 安吉县| 桐庐县| 江华| 监利县| 敦化市| 顺平县| 隆子县| 凌源市| 梧州市| 视频| 渑池县| 河间市| 获嘉县| 榆中县| 青冈县| 资源县| 惠来县| 得荣县| 潮州市| 盐源县| 通江县| 广东省| 金阳县| 日照市| 泗阳县| 木兰县| 静宁县| 阿合奇县| 九龙县| 贵溪市|