首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ngZone.runTask中调用ngZone.runOutsideAngular仍会触发其他组件中的更改检测

在ngZone.runTask中调用ngZone.runOutsideAngular仍会触发其他组件中的更改检测
EN

Stack Overflow用户
提问于 2019-07-29 17:58:09
回答 1查看 1.6K关注 0票数 0

我试图在3秒后使用setTimeout执行一项任务,但我试图在整个应用程序中不触发更改检测。

我尝试在角区域外运行setTimeout,然后重新输入区域以运行setTimeout的回调任务。但是,一旦我重新进入区域,它就会触发整个应用程序中的更改检测。

我有一个具体的代码:

代码语言:javascript
复制
ngOnInit() {
    this.ngZone.runOutsideAngular(() => {
      setTimeout(() => {
        this.ngZone.runTask(() => {
          console.log("SHOULD NOT TRIGGER CHANGE DETECTION IN OTHER DIRECTIVES");
        });
      }, 3000);
    });
  }

关于代码的更广泛的视图,我有一个stackblitz示例:https://stackblitz.com/edit/runoutside-ng-runinside?file=src/app/app.module.ts

我的期望是,只要我在角度区域外运行setTimeout,它就不应该触发变化检测。我只想在到达setTimeout内部的任务时激活更改检测,以便能够将更改检测保留在组件中,而不是整个应用程序组件中。然而,目前,一旦我重新进入角区,它也会触发其他部件的变化检测。

EN

回答 1

Stack Overflow用户

发布于 2019-07-29 18:04:59

this.ngZone.runTask总是在角度范围内运行,这取决于正常的changeDetection策略。把它放在runOutsideAngular中并不会改变这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57259136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档