簡體   English   中英

changeDetection onPush 僅在第二次點擊時觸發

[英]changeDetection onPush is triggering only on second click

我發現有關更改檢測的性能存在一些問題,因此我從過去幾周開始使用 onPush。 到目前為止一切都很好,但我不知道它對 p-chips 的行為很奇怪,它只能在第二次點擊時工作:(

Stackblitz 工作示例在此處輸入鏈接描述

在stackblitz中,您可以在第一次單擊detectChanges時看到名稱更改,但這不是p-chips的情況...有人可以幫我:)

嘗試使用 settimeout 只是為了檢查它是否刷新了總視圖,但 settimeout 也沒有更新視圖

我相信這個問題的陳述會有所幫助。

我找不到使用OnPush檢測策略發生這種情況的原因,但是將您的detectChanges()回調發送回隊列(使其異步)將解決您的問題。

您可以通過調用setTimeout調用中的方法來做到這一點:

setTimeout(() => this._cdRef.detectChanges(), 0);

請查看stackblitz 演示

您可以使用setTimeout(() => this._cdRef.detectChanges(), 0); 在您的emptyArray function 中。 它使用區域並在它之后檢測更改。

嗨,伙計們,我嘗試了您所有的答案,甚至 settimeout 都不適合我。 我也不喜歡使用 settimeout,因為它確實會從應用程序組件級別更改檢測

這對我有用:)。 我真的不明白為什么 detectChanges 對所有 rest 都有效,並且僅對於這個 p 芯片,我需要在它工作之前添加 markForCheck。

this._cdRef.markForCheck();
this._cdRef.detectChanges();

暫無
暫無

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

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