Javascript 角度2推送检测策略
我在理解角度推送检测策略方面有问题。 当我执行一些异步操作(比如从TS打开覆盖,这样就不会导致使用OnPush策略在组件上检测更改),然后单击任意位置,或调用其他检测事件(不在我的组件上),它会更改(覆盖打开)。 为什么会这样? 我在一个页面上有太多这样的组件(当我有15-20个单元时,性能会变得非常糟糕),所以我需要禁用检测,我该怎么做?Javascript 角度2推送检测策略,javascript,angular,Javascript,Angular,我在理解角度推送检测策略方面有问题。 当我执行一些异步操作(比如从TS打开覆盖,这样就不会导致使用OnPush策略在组件上检测更改),然后单击任意位置,或调用其他检测事件(不在我的组件上),它会更改(覆盖打开)。 为什么会这样? 我在一个页面上有太多这样的组件(当我有15-20个单元时,性能会变得非常糟糕),所以我需要禁用检测,我该怎么做? 我尝试使用detach()方法,但在我的组件上发生简单事件后仍需要更改。这全面解释了onPush: 当@输入更改或触发事件时,它会触发 听起来您想手动分离
我尝试使用detach()方法,但在我的组件上发生简单事件后仍需要更改。这全面解释了onPush: 当
@输入更改或触发事件时,它会触发
听起来您想手动分离并重新连接:
constructor(private cd: ChangeDetectorRef){}
public ngOnInit() {
this.cd.detach();
// do stuff
this.cd.reattach();
}
如果分离而从不重新连接,则是,UI中不会反映任何更改。
如果您需要执行繁重的任务并需要停止更改检测,您还必须使用resattach()
尽管听起来您也希望重新考虑组件结构,因为您希望尽可能少地干扰更改检测以避免UI错误。这全面解释了onPush:
当@输入更改或触发事件时,它会触发
听起来您想手动分离并重新连接:
constructor(private cd: ChangeDetectorRef){}
public ngOnInit() {
this.cd.detach();
// do stuff
this.cd.reattach();
}
如果分离而从不重新连接,则是,UI中不会反映任何更改。
如果您需要执行繁重的任务并需要停止更改检测,您还必须使用resattach()
尽管听起来您也希望重新考虑组件结构,因为您希望尽可能少地干扰更改检测以避免UI错误。欢迎使用堆栈溢出!请阅读并在你的问题中添加一些你努力的代码。谢谢欢迎来到堆栈溢出!请阅读并在你的问题中添加一些你努力的代码。谢谢非常感谢你的回答!但是如何更改组件结构呢?我有一个大而重的角度应用程序,每个事件dom都会重新计算,所以当我在一个页面上有更多组件时,它的工作速度会变慢:(与代码无关,因为我将其加速到了最大程度,为此阅读了大量指南。我不知道您的项目看起来如何,但有太多的方法可以减少组件数量并提高速度。例如,使用
的内容投影可以简化许多组件,但这确实是针对cas的e、 答案是否符合您的预期?是的,非常感谢!了解它的工作原理,因此我需要分离此组件上的更改,因为我需要它们并且无法减少它们的数量。非常感谢您的回答!但是我如何更改组件结构?我有一个大而重的角度应用程序,每个事件dom都会重新计算,因此它的工作速度较慢当页面上有更多组件时:(与代码无关,因为我将其加速到了最大程度,为此阅读了大量指南。我不知道您的项目看起来如何,但有太多的方法可以减少组件数量并提高速度。例如,使用
的内容投影可以简化许多组件,但这确实是针对cas的e、 答案是否符合您的预期?是的,非常感谢!了解它的工作原理,因此我需要分离此组件上的更改,因为我需要它们并且无法减少它们的数量。