我试图使用Angular中的setTimeout在3秒后运行任务,但是我试图在不触发整个应用程序的变更检测的情况下执行任务。
我尝试在Angular区域之外运行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
我的期望是,只要我在Angular区域之外运行setTimeout,它就不会触发更改检测。我只想在到达setTimeout内的任务时激活更改检测,以便可以将更改检测保留在组件内,而不是整个应用程序组件。但是,目前,一旦我重新进入Angular区域,它也会触发其他组件中的更改检测。
答案 0 :(得分:0)
this.ngZone.runTask始终将在Angular中运行,但要遵循常规的changeDetection策略。将其放置在runOutsideAngular中不会改变它。