Angular 2 OnPush检测策略

时间:2018-09-09 10:48:12

标签: javascript angular

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

1 个答案:

答案 0 :(得分:2)

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

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

ChangeDetectorRef knows some methods which could be interesting

想要手动分离并重新附着的声音:

constructor(private cd: ChangeDetectorRef){}

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

  // do stuff

  this.cd.reattach();
}

如果分离但再也没有附加,是的,不会在用户界面中反映任何更改。 如果您需要执行繁重的任务并且需要停止检测更改,则还必须使用reattach()

重新启用它

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