第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

markForCheck()和detectChanges()有什么區(qū)別

markForCheck()和detectChanges()有什么區(qū)別

揚帆大魚 2019-10-15 10:52:45
ChangeDetectorRef.markForCheck()和之間有什么區(qū)別ChangeDetectorRef.detectChanges()?我只找到了關(guān)于SO的信息NgZone.run(),但沒有找到這兩個功能之間的區(qū)別。對于僅參考文檔的答案,請舉例說明一些實際情況,以供選擇。
查看完整描述

3 回答

?
交互式愛情

TA貢獻1712條經(jīng)驗 獲得超3個贊

兩者之間的最大區(qū)別是detectChanges()實際上觸發(fā)變更檢測,而markForCheck()不會觸發(fā)變更檢測。


detectChanges

該代碼用于從觸發(fā)您的組件開始對組件樹進行更改檢測detectChanges()。因此,更改檢測將針對當前組件及其所有子組件運行。Angular在中保留對根組件樹的引用ApplicationRef,當發(fā)生任何異步操作時,它會通過包裝方法觸發(fā)對該根組件的更改檢測tick():


@Injectable()

export class ApplicationRef_ extends ApplicationRef {

  ...

  tick(): void {

    if (this._runningTick) {

      throw new Error('ApplicationRef.tick is called recursively');

    }


    const scope = ApplicationRef_._tickScope();

    try {

      this._runningTick = true;

      this._views.forEach((view) => view.detectChanges()); <------------------

view這是根組件視圖。正如我在引導(dǎo)多個組件的含義中所描述的那樣,可能有許多根組件。


@milad描述了您可能需要手動觸發(fā)更改檢測的原因。


markForCheck

就像我說的,這個家伙根本不會觸發(fā)變更檢測。它只是從當前組件向上擴展到根組件,并將其視圖狀態(tài)更新為ChecksEnabled。這是源代碼:


export function markParentViewsForCheck(view: ViewData) {

  let currView: ViewData|null = view;

  while (currView) {

    if (currView.def.flags & ViewFlags.OnPush) {

      currView.state |= ViewState.ChecksEnabled;  <-----------------

    }

    currView = currView.viewContainerParent || currView.parent;

  }

}

組件的實際更改檢測未計劃,但將來會發(fā)生時(作為當前或下一個CD周期的一部分),即使父組件視圖已脫離更改檢測器,也將對其進行檢查??梢酝ㄟ^使用cd.detach()或指定OnPush更改檢測策略來分離更改檢測器。所有本機事件處理程序都將所有父組件視圖標記為要檢查。


這種方法通常在ngDoCheck生命周期掛鉤中使用。如果您認為這ngDoCheck意味著正在檢查您的組件。



查看完整回答
反對 回復(fù) 2019-10-15
?
當年話下

TA貢獻1890條經(jīng)驗 獲得超9個贊

商店更新主要是由于獲取或設(shè)置isFetching before導(dǎo)致的。并在獲取后..但是我們不能總是使用,async pipe因為在訂閱內(nèi)部,我們通常有一些事情要做call setFromValues do some comparison..如果async本身調(diào)用markForCheck它,那么如果我們自己調(diào)用它會帶來什么問題呢?但是同樣,在ngOnInit獲取不同數(shù)據(jù)時,我們通常會有2-3個或更多選擇器……而我們markForCheck都將它們都調(diào)用了。

查看完整回答
反對 回復(fù) 2019-10-15
  • 3 回答
  • 0 關(guān)注
  • 2900 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號