首页 > 解决方案 > Angular 2 OnPush 检测策略

问题描述

我在理解 Angular OnPush 检测策略方面遇到问题。当我执行一些异步操作时(例如从 TS 打开覆盖,因此不应导致使用 OnPush 策略检测组件上的更改),然后我单击任意位置或调用其他检测事件(不在我的组件中),它会更改(覆盖打开)。为什么会这样?我在一个页面上有太多这样的组件(当我有 15-20 个单位时性能变得非常糟糕),所以我需要禁用检测,我该怎么做?我尝试使用detach()方法,但我仍然需要在组件上发生简单事件后进行更改。

标签: javascriptangular

解决方案


这全面解释了 onPush:https ://netbasal.com/a-comprehensive-guide-to-angular-onpush-change-detection-strategy-5bac493074a4

当 an@Input更改或触发事件时,它会触发。

ChangeDetectorRef 知道一些可能很有趣的方法

听起来您想手动分离和重新连接:

constructor(private cd: ChangeDetectorRef){}

public ngOnInit() {
  this.cd.detach();

  // do stuff

  this.cd.reattach();
}

如果您分离并且从不重新连接,是的,不会在 UI 中反映任何更改。如果您需要执行繁重的任务并需要停止更改检测,您还必须重新启用它reattach()

尽管听起来您还想重新考虑组件结构,因为您想尽可能少地弄乱更改检测以避免 UI 错误。


推荐阅读