所有 setInterval 函数都会触发变化检测吗?

Ste*_*ios 3 angular

根据标题,我很好奇是否每次我使用setIntervalif创建间隔,因为 Angular 进行了匀场,如果每次间隔运行时都会创建一个更改检测事件。

我一直在阅读我能找到的所有文档,但我找不到明确的答案。

为了澄清起见,我的问题是,如果我运行以下代码,间隔的每次迭代是否会触发更改检测事件并导致 Angular 尝试更新应用程序的视图,直到满足条件?

let myInterval = setInterval( () => {

    if (conditionsAreMet()){
        clearInterval(myInterval);
    }
})
Run Code Online (Sandbox Code Playgroud)

Max*_*kyi 7

这取决于使用的区域setInterval。如果它在 NgZone 内部使用,那么是的,它每次都会触发更改检测。如果您在 angular zone 之外运行它,则不会触发更改检测。

外角区域:

export class AppComponent {
  name = 'Angular';

  constructor(zone: NgZone) {
    // will not trigger change detection
    zone.runOutsideAngular(() => {
      setInterval(() => {
        this.name = 'boob';
      }, 2000);
    })
Run Code Online (Sandbox Code Playgroud)

角度区域内:

export class AppComponent {
  name = 'Angular';

  constructor(zone: NgZone) {
    // will trigger change detection
    setInterval(() => {
      this.name = 'boob';
    }, 2000);
  }
Run Code Online (Sandbox Code Playgroud)