我发现了一些与变更检测有关的性能问题,所以我从过去几周开始使用onPush。到现在为止,一切都很好,但我对p芯片并没有什么奇怪的行为,它只在第二次点击时工作:
Stackblitz工作示例在这里输入链接描述
在stackblitz中,您可以在第一次单击detectChanges时看到名称的更改,但这不是p-chips的场景.有人能帮我吗?)
尝试使用settimeout来检查它的刷新总视图是否正确,但是settimeout也没有更新视图。
发布于 2020-07-03 06:50:25
我相信这个问题的声明会有所帮助。
在OnPush
检测策略中,我找不到发生这种情况的原因,但是在队列中发送detectChanges()
调用(使其成为异步)将解决问题。
可以通过在setTimeout
调用中调用方法来做到这一点:
setTimeout(() => this._cdRef.detectChanges(), 0);
请查一下stackblitz演示。
发布于 2020-07-03 06:52:37
您可以在您的setTimeout(() => this._cdRef.detectChanges(), 0);
函数中使用emptyArray
。它使用区域并在其之后检测更改。
发布于 2020-07-03 07:20:10
嗨,伙计们,我试过你们所有的答案,即使是设置超时也不适合我。我也不喜欢使用settimeout,因为它确实改变了应用程序组件级别的检测。
这对我有用:)。我真的不明白为什么detectChanges要为所有其他的芯片工作,而只为这个p芯片工作,我需要在它开始工作之前添加markForCheck。
this._cdRef.markForCheck();
this._cdRef.detectChanges();
https://stackoverflow.com/questions/62717511
复制相似问题