Я пытаюсь запустить задачу через 3 секунды, используя setTimeout в Angular, но я пытаюсь сделать это, не вызывая обнаружение изменений во всем приложении.
Я попытался запустить setTimeout вне зоны Angular и повторно войти в зону, чтобы запустить задачу обратного вызова 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 вне зоны Angular, он не должен вызывать обнаружение изменений. Я хочу активировать обнаружение изменений только при достижении задач внутри setTimeout, чтобы я мог сохранить обнаружение изменений внутри компонента, а не во всех компонентах приложения. Однако в настоящее время, как только я снова вхожу в зону Angular, он запускает обнаружение изменений и в других компонентах.