我在理解角度OnPush检测策略方面有问题。当我执行一些异步操作(比如从TS中打开覆盖,这样就不会导致使用OnPush策略检测组件上的更改),然后我点击任何地方,或者调用其他检测事件(不是在我的组件上),它就会改变(覆盖打开)。为什么会发生这种事?我在一个页面上有太多这样的组件(当我有15-20个部件时,性能会变得非常糟糕),所以我需要禁用检测,我怎么能做到呢?我尝试使用detach()方法,但在组件上发生简单事件之后仍然需要进行更改。
发布于 2018-09-09 11:14:51
这就全面地解释了onPush:https://netbasal.com/a-comprehensive-guide-to-angular-onpush-change-detection-strategy-5bac493074a4
当@Input
被更改或事件被触发时,它会触发。
听起来您想手动分离和重新连接:
constructor(private cd: ChangeDetectorRef){}
public ngOnInit() {
this.cd.detach();
// do stuff
this.cd.reattach();
}
如果您分离和永远不重新附加,是的,没有变化将反映在UI中。如果您需要执行繁重的任务,并且需要进行更改检测才能停止,则还必须使用reattach()
重新启用它。
尽管听起来您也想重新考虑组件结构,因为您希望尽可能少地处理更改检测,以避免UI错误。
https://stackoverflow.com/questions/52243725
复制相似问题