簡體   English   中英

角度變化檢測

[英]ChangeDetection in Angular

我試圖更好地了解ChangeDetection的工作方式,並且我有一個與此相關的問題。

如果我正在使用ngOnChanges生命周期掛鈎上的changeDetection: ChangeDetectionStrategy.OnPush ngOnChanges我還需要驗證currentValue存在? 還是足以驗證輸入是否已更改?

我可以舉一個例子來更好地理解我在說什么:

因此,正如我提到的,我正在使用changeDetection: ChangeDetectionStrategy.OnPush ,這是我的輸入@Input() isInspectionReopened: boolean; ngOnChanges看起來像這樣:

ngOnChanges(changes: SimpleChanges) {
  if(changes.isInspectionReopened) {
     // do something
  }
}

足以確認changes.isInspectionReopened或我需要添加changes.isInspectionReopened.currentValue嗎?

SimpleChanges僅包含更改的值,因此,如果isInspectionReopened道具未更改,則該isInspectionReopened會丟失。

使用ChangeDetectionStrategy.OnPush ,通常根本不應該使用ngOnChanges回調。 ChangeDetectionStrategy.OnPush僅影響邏輯,該邏輯決定何時運行更改檢測。 因此,更改isInspectionReopened道具后,將觸發更改檢測,因為它是一個'@Input'屬性,並且如果組件html綁定到該屬性,則該HTML將被更新。

但是,如果isInspectionReopened不是'@Input'屬性,例如,組件從服務器加載值並更新它,則與標准更改檢測不同, OnPush檢測將無法識別該更改。 在OnPush策略的情況下,可以將RxJs Observables與async管道一起使用來強制進行更改檢測, 這是一個示例。

另外,請記住,“ @ Input”屬性僅在通過父組件的數據綁定進行更新時才觸發更改檢測。 如果組件本身更改了“ @Input”屬性值,則不會觸發更改檢測。

組件dom事件也觸發更改檢測。 例如,如果您監聽點擊事件,並在點擊處理程序中進行了更改,則無論如何都會由於該事件而觸發更改檢測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM