目錄
constructor
ngOnChanges
ngOnInit
count: {{ count }}
ngDoCheck
ngAfterContentInit
ngAfterContentChecked
ngAfterViewInit
ngAfterViewChecked
ngOnDestroy
首頁 web前端 js教程 Angular學習之聊聊生命週期

Angular學習之聊聊生命週期

Jan 16, 2023 pm 08:03 PM
javascript angular angular.js 生命週期

這篇文章帶大家繼續angular的學習,使用angular進行開發時,避免不了需要接觸生命週期,下面就來帶大家一起聊聊Angular中的生命週期,希望對大家有所幫助!

Angular學習之聊聊生命週期

接觸過 reactvue 開發的讀者應該對生命週期這個概念不陌生。我們在使用 angular 開發的過程中,是避免不了的。

元件從開始建立到銷毀的過程中,會經歷過一系列的階段。這就是一個生命週期,這些階段對應著應用程式提供的 lifecycle hooks

那麼,在 angular 中,這些 hooks 都有哪些呢?了解它們,對你編寫程式應該在哪裡寫,很重要。 【相關教學推薦:《angular教學》】

angular 中,生命週期執行的順序如下:

- constructor 【常用,不算钩子函数,但是很重要】
- ngOnChanges【常用】
- ngOnInit【常用】
- ngDoCheck
  - ngAfterContentInit
  - ngAfterContentChecked
  - ngAfterViewInit【常用】
  - ngAfterViewChecked
- ngOnDestroy【常用】
登入後複製

為了解說與驗證,我們用angular-cli 產生一個demo 專案。

constructor

es6 中的class 初始化物件的時候,constructor 會立即被調用。

class Person {
  constructor(name) {
    console.log('be called')
    this.name = name;
  }
}

let jimmy = new Person('jimmy'); // be called
登入後複製

angular 的元件本身就是要匯出一個類別。當這個元件被 new 起來的時候,會取得 constructor 中的預設的值。

ngOnChanges

當我們有外部參數變更的時候,我們就會執行ngOnChanges,也就是說元件中有@ Input 所綁定的屬性值改變的時候呼叫。

簡單說,父元件綁定子元件中的元素,會觸發這個鉤子函數,可以多次出發。這在下面的 ngOnInit 總是會介紹。

ngOnInit

這個方法呼叫的時候,表示元件已經初始化成功。在第一次 ngOnChanges() 完成之後調用,且只調用一次。

// app.component.ts
export class AppComponent implements OnInit, OnChanges {

  constructor() {
    console.log('1. constructor')
  }

  ngOnChanges() {
    console.log('2. ngOnChanges')
  }

  ngOnInit() {
    console.log('3. ngOnInit')
  }
}
登入後複製

列印的資訊如下:

Angular學習之聊聊生命週期

咦?怎麼沒有列印 ngOnChanges 中的鉤子函數資訊呢?

上面已經說過了,需要觸發條件 @Input 的屬性值改變的時候。讓我們來修改一下:

<!-- app.component.html -->
<div>
  <app-demo></app-demo>
</div>
登入後複製
// app.component.ts
// AppComponent 类中添加属性
public count:number = 0;
登入後複製
<!-- demo.component.html -->
<h3 id="count-nbsp-nbsp-count-nbsp">count: {{ count }}</h3>
登入後複製
// demo.component.ts
export class DemoComponent implements OnInit, OnChanges {

  @Input()
  public count: number;

  constructor() {
    console.log(&#39;1. demo constructor&#39;)
  }

  ngOnChanges() {
    console.log(&#39;2. demo ngOnChanges&#39;)
  }

  ngOnInit() {
    console.log(&#39;3. demo ngOnInit&#39;)
  }

}
登入後複製

Angular學習之聊聊生命週期

當透過@Input 將值傳遞給子元件demo 的時候,就會觸發demo 元件中的ngOnChanges

@Input 傳遞的屬性改變的時候,可以多次觸發 demo 元件中的 ngOnChanges 鉤子函數。

<!-- app.component.html -->
<div>
  <app-demo [count]="count"></app-demo>

  <button (click)="parentDemo()">parent button</button>
</div>
登入後複製
// app.component.ts
parentDemo() {
  this.count++;
}
登入後複製

Angular學習之聊聊生命週期

ngDoCheck

#當變化偵測發生的時候,觸發該鉤子函數。

這個鉤子函數,緊接在每次執行變更偵測時候 ngOnChanges 和第一次執行執行變更偵測 ngOnInit 後面呼叫。

// demo.component.ts

ngDoCheck() {
  console.log(&#39;4. demo ngDoCheck&#39;)
}
登入後複製

Angular學習之聊聊生命週期

這個鉤子函數呼叫得比較頻繁,使用成本比較高,謹慎使用。

一般是使用ngOnChanges 來偵測變動,而不是ngDoCheck

ngAfterContentInit

當外部的內容投影到內部元件,第一次呼叫ngDoCheck 之後呼叫ngAfterContentInit,而且只呼叫一次。

// demo.component.ts

ngAfterContentInit() {
  console.log(&#39;5. demo ngAfterContentInit&#39;);
}
登入後複製

Angular學習之聊聊生命週期

ngAfterContentChecked

ngAfterContentChecked 鉤子函數在每次ngDoCheck 之後調用.

// demo.component.ts

ngAfterContentChecked() {
  console.log(&#39;5. demo ngAfterContentChecked&#39;);
}
登入後複製

Angular學習之聊聊生命週期

ngAfterViewInit

#視圖初始化完成呼叫此鉤子函數。在第一次 ngAfterContentChecked 之後調用,只調用一次。

這個時候,取得頁面的 DOM 節點比較合理

// demo.compoent.ts

ngAfterViewInit() {
  console.log(&#39;7. demo ngAfterViewInit&#39;);
}
登入後複製

Angular學習之聊聊生命週期

ngAfterViewChecked

视图检测完成调用。在 ngAfterViewinit 后调用,和在每次 ngAfterContentChecked 之后调用,也就是在每次 ngDoCheck 之后调用。

// demo.component.ts

ngAfterViewChecked() {
  console.log(&#39;8. ngAfterViewChecked&#39;)
}
登入後複製

Angular學習之聊聊生命週期

ngOnDestroy

组件被销毁时候进行的操作。

在这个钩子函数中,我们可以取消订阅,取消定时操作等等。

<!-- app.component.html -->
<app-demo [count]="count" *ngIf="showDemoComponent"></app-demo>

<button (click)="hideDemo()">hide demo component</button>
登入後複製
// app.component.ts
public showDemoComponent: boolean = true;

hideDemo() {
  this.showDemoComponent = false
}
登入後複製
// demo.component.ts
ngOnDestroy() {
  console.log(&#39;9. demo ngOnDestroy&#39;)
}
登入後複製

Angular學習之聊聊生命週期

PS: 不知道读者有没有发现,调用一次的钩子函数都比较常用~

更多编程相关知识,请访问:编程入门!!

以上是Angular學習之聊聊生命週期的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何處理 C++ 函數指標的析構與生命週期管理? 如何處理 C++ 函數指標的析構與生命週期管理? Apr 17, 2024 pm 05:48 PM

在C++中,函數指標需要適當的析構和生命週期管理。可以透過以下方式實現:手動析構函數指針,釋放記憶體。使用智慧指針,如std::unique_ptr或std::shared_ptr,自動管理函數指標的生命週期。將函數指標綁定到對象,對像生命週期管理函數指標的析構。在GUI程式設計中,使用智慧指標或綁定到物件可確保回呼函數在適當的時候被析構,避免記憶體洩漏和不一致。

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

Angular元件及其顯示屬性:了解非block預設值 Angular元件及其顯示屬性:了解非block預設值 Mar 15, 2024 pm 04:51 PM

Angular框架中元件的預設顯示行為不是區塊級元素。這種設計選擇促進了元件樣式的封裝,並鼓勵開發人員有意識地定義每個元件的顯示方式。透過明確設定CSS屬性 display,Angular組件的顯示可以完全控制,從而實現所需的佈局和響應能力。

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

See all articles