我试图在3秒后使用setTimeout执行一项任务,但我试图在整个应用程序中不触发更改检测。
我尝试在角区域外运行setTimeout,然后重新输入区域以运行setTimeout的回调任务。但是,一旦我重新进入区域,它就会触发整个应用程序中的更改检测。
我有一个具体的代码:
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内部的任务时激活更改检测,以便能够将更改检测保留在组件中,而不是整个应用程序组件中。然而,目前,一旦我重新进入角区,它也会触发其他部件的变化检测。
发布于 2019-07-29 18:04:59
this.ngZone.runTask总是在角度范围内运行,这取决于正常的changeDetection策略。把它放在runOutsideAngular中并不会改变这一点。
https://stackoverflow.com/questions/57259136
复制相似问题