[英]What is the right way to use changeDetection.markForCheck() in Angular?
我正在使用markForCheck
來檢測我的角度組件中的變化(其中有changeDetection: ChangeDetectionStrategy.OnPush
),最初,我將markForCheck
放在函數的開頭, markForCheck
我markForCheck
,然后我意識到放置它會更有意義在所有功能動作完成后。
在這兩種方法中,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.