這篇文章主要介紹“Angular生命周期執(zhí)行的順序是什么”,在日常操作中,相信很多人在Angular生命周期執(zhí)行的順序是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Angular生命周期執(zhí)行的順序是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、雅安服務器托管、營銷軟件、網(wǎng)站建設、寶安網(wǎng)站維護、網(wǎng)站推廣。
接觸過 react
和 vue
開發(fā)的讀者應該對生命周期這個概念不陌生。我們在使用 angular
開發(fā)的過程中,是避免不了的。
組件從開始建立到銷毀的過程中,會經(jīng)歷過一系列的階段。這就是一個生命周期,這些階段對應著應用提供的 lifecycle hooks
。
那么,在 angular
中,這些 hooks
都有哪些呢?了解它們,對你編寫程序應該在哪里編寫,很重要。
angular
中,生命周期執(zhí)行的順序如下:
- constructor 【常用,不算鉤子函數(shù),但是很重要】
- ngOnChanges【常用】
- ngOnInit【常用】
- ngDoCheck
- ngAfterContentInit
- ngAfterContentChecked
- ngAfterViewInit【常用】
- ngAfterViewChecked
- ngOnDestroy【常用】
為了解說和驗證,我們用 angular-cli
生成一個 demo
項目。
在 es6
中的 class
初始化對象的時候,constructor
會立即被調(diào)用。
class Person {
constructor(name) {
console.log('be called')
this.name = name;
}
}
let jimmy = new Person('jimmy'); // be called
angular
的組件本身就是導出一個類。當這個組件被 new
起來的時候,會獲取 constructor
中的預設的值。
當我們有外部參數(shù)更改的時候,我們就會執(zhí)行 ngOnChanges
,也就是說組件中有 @Input
所綁定的屬性值發(fā)生改變的時候調(diào)用。
簡單說,父組件綁定子組件中的元素,會觸發(fā)這個鉤子函數(shù),可以多次出發(fā)。這在下面的 ngOnInit
總會介紹。
這個方法調(diào)用的時候,說明組件已經(jīng)初始化成功。在第一次 ngOnChanges()
完成之后調(diào)用,且只調(diào)用一次。
// app.component.ts
export class AppComponent implements OnInit, OnChanges {
constructor() {
console.log('1. constructor')
}
ngOnChanges() {
console.log('2. ngOnChanges')
}
ngOnInit() {
console.log('3. ngOnInit')
}
}
打印的信息如下:
咦?怎么沒有打印 ngOnChanges
中的鉤子函數(shù)信息呢?
上面已經(jīng)說過了,需要觸發(fā)條件 @Input
的屬性值改變的時候。我們來修改一下:
// app.component.ts
// AppComponent 類中添加屬性
public count:number = 0;
count: {{ count }}
// demo.component.ts
export class DemoComponent implements OnInit, OnChanges {
@Input()
public count: number;
constructor() {
console.log('1. demo constructor')
}
ngOnChanges() {
console.log('2. demo ngOnChanges')
}
ngOnInit() {
console.log('3. demo ngOnInit')
}
}
當通過 @Input
將值傳遞給子組件 demo
的時候,就會觸發(fā) demo
組件中的 ngOnChanges
。
當 @Input
傳遞的屬性發(fā)生改變的時候,可以多次觸發(fā) demo
組件中的 ngOnChanges
鉤子函數(shù)。
// app.component.ts
parentDemo() {
this.count++;
}
當發(fā)生變化檢測的時候,觸發(fā)該鉤子函數(shù)。
這個鉤子函數(shù),緊跟在每次執(zhí)行變更檢測時候 ngOnChanges
和首次執(zhí)行執(zhí)行變更檢測時 ngOnInit
后面調(diào)用。
// demo.component.ts
ngDoCheck() {
console.log('4. demo ngDoCheck')
}
這個鉤子函數(shù)調(diào)用得比較頻繁,使用成本比較高,謹慎使用。
一般使用 ngOnChanges 來檢測變動,而不是 ngDoCheck
當把外部的內(nèi)容投影到內(nèi)部組件,第一次調(diào)用 ngDoCheck
之后調(diào)用 ngAfterContentInit
,而且只調(diào)用一次。
// demo.component.ts
ngAfterContentInit() {
console.log('5. demo ngAfterContentInit');
}
ngAfterContentChecked
鉤子函數(shù)在每次 ngDoCheck
之后調(diào)用.
// demo.component.ts
ngAfterContentChecked() {
console.log('5. demo ngAfterContentChecked');
}
視圖初始化完成調(diào)用此鉤子函數(shù)。在第一次 ngAfterContentChecked
之后調(diào)用,只調(diào)用一次。
這個時候,獲取頁面的 DOM
節(jié)點比較合理
// demo.compoent.ts
ngAfterViewInit() {
console.log('7. demo ngAfterViewInit');
}
視圖檢測完成調(diào)用。在 ngAfterViewinit
后調(diào)用,和在每次 ngAfterContentChecked
之后調(diào)用,也就是在每次 ngDoCheck
之后調(diào)用。
// demo.component.ts
ngAfterViewChecked() {
console.log('8. ngAfterViewChecked')
}
組件被銷毀時候進行的操作。
在這個鉤子函數(shù)中,我們可以取消訂閱,取消定時操作等等。
// app.component.ts
public showDemoComponent: boolean = true;
hideDemo() {
this.showDemoComponent = false
}
// demo.component.ts
ngOnDestroy() {
console.log('9. demo ngOnDestroy')
}
PS: 不知道讀者有沒有發(fā)現(xiàn),調(diào)用一次的鉤子函數(shù)都比較常用~
到此,關于“Angular生命周期執(zhí)行的順序是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享文章:Angular生命周期執(zhí)行的順序是什么
標題網(wǎng)址:http://weahome.cn/article/ggechg.html