監測頁面數據變化
angular 會在我們的組件發生變化的時候,對我們的組件執行變化檢測,如果檢測到我們的數據發生了變化,就會執行某些操作,如修改綁定數據的時候更新視圖。這樣一來,當我們的組件數據比較多的時候,angular就會有很多操作在靜悄悄地進行,因此,就需要ChangeDetectorRef來實時檢測數據的變化並更新視圖數據
1、引入ChangeDetectorRef模塊
import { ChangeDetectorRef } from “angular”;
2、聲明
constructor(private cd:ChangeDetectorRef) {
}
3、引用
this.cd.detectChanges();實時檢測頁面及其子元素的變化
changeDetection: ChangeDetectionStrategy.OnPush
當使用 OnPush 策略的時候,若輸入屬性沒有發生變化,組件的變化檢測將會被跳過
ChangeDetectorRef 是組件的變化檢測器的引用
export abstract class ChangeDetectorRef { abstract markForCheck(): void; abstract detach(): void; abstract detectChanges(): void; abstract reattach(): void; }
markForCheck() - 當輸入已更改或視圖中發生了事件時,組件通常會標記為臟的(需要重新渲染)。調用此方法會確保即使那些觸發器沒有被觸發,也仍然檢查該組件。
在組件的 metadata 中如果設置了 changeDetection: ChangeDetectionStrategy.OnPush 條件,那么變化檢測不會再次執行,除非手動調用該方法。 detach() - 從變化檢測樹中分離變化檢測器,該組件的變化檢測器將不再執行變化檢測,除非手動調用 reattach() 方法。 reattach() - 重新添加已分離的變化檢測器,使得該組件及其子組件都能執行變化檢測 detectChanges() - 從該組件到各個子組件執行一次變化檢測 檢查該視圖及其子視圖。與 detach 結合使用可以實現局部變更檢測。
onPush()策略時 淺拷貝數據觸發輸入屬性的變化以觸發檢查