簡體   English   中英

在 Angular 中使用 changeDetection.markForCheck() 的正確方法是什么?

[英]What is the right way to use changeDetection.markForCheck() in Angular?

我正在使用markForCheck來檢測我的角度組件中的變化(其中有changeDetection: ChangeDetectionStrategy.OnPush ),最初,我將markForCheck放在函數的開頭, markForCheckmarkForCheck ,然后我意識到放置它會更有意義在所有功能動作完成后。

在這兩種方法中,angular 都會檢測變化,如果它最初被調用或在動作完成后被調用。

因此,如果有人可以證明使用 markForCheck 的正確方法是什么?

functionName() { // It works at both places
  this.cd.markForCheck();
  //
  .... Some Code that needs markForCheck ....
  //
  this.cd.markForCheck();
}

更改一些數據和組件后需要使用 this.cdr.markForCheck() 屬性 changeDetection: ChangeDetectionStrategy.OnPush

因為在這種情況下,如果某些子子組件具有 OnPush,組件將不會重新加載自 html 模板 - 父“markForCheck()”也會重繪它們。 如果在沒有 OnPush 的子組件中顯示更改的數據,則不能使用“markForCheck()”

在我的例子中,compA 在 html 中有 mat-table,所以在重新加載項目后,我調用 markForCheck() 來重繪 mat-table

您可以使用markForCheck()告訴 Angular“標記”在主動更改檢測策略之外發生的更改。

當您使用默認更改檢測策略時, markForCheck()不是必需的,我猜這就是為什么您最初在markForCheck()調用markForCheck()並不重要。

正確的地方打電話markForCheck()是一個組件內ChangeDetectionStrategy.OnPush你做,不會被OnPush變化檢測得到回升更改

這是您可能會覺得有用的更深入的解釋, markForCheck() 和detectChanges() 之間什么區別

編輯:我錯誤地說 markForCheck() 觸發了更改檢測,這是不正確的。 謝謝@Fatih Ersoy

暫無
暫無

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

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