Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 所有setInterval功能是否触发变化检测?_Angular - Fatal编程技术网

Angular 所有setInterval功能是否触发变化检测?

Angular 所有setInterval功能是否触发变化检测?,angular,Angular,根据标题,我很好奇是否每次使用setIntervalif创建间隔时,由于Angular进行了填隙,是否每次间隔运行时都会创建更改检测事件 我已经阅读了所有我能找到的文档,但我找不到一个明确的答案 为了澄清,我的问题是,如果我运行以下代码,那么间隔的每次迭代是否都会触发更改检测事件,并导致Angular尝试更新应用程序的视图,直到满足条件为止 let myInterval = setInterval( () => { if (conditionsAreMet()){

根据标题,我很好奇是否每次使用
setInterval
if创建间隔时,由于Angular进行了填隙,是否每次间隔运行时都会创建更改检测事件

我已经阅读了所有我能找到的文档,但我找不到一个明确的答案

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

let myInterval = setInterval( () => {

    if (conditionsAreMet()){
        clearInterval(myInterval);
    }
})

这取决于所使用的
setInterval
区域。如果在NgZone内使用,那么是的,每次都会触发更改检测。如果在角度区域外运行,则不会触发变化检测

外角区:

export class AppComponent {
  name = 'Angular';

  constructor(zone: NgZone) {
    // will not trigger change detection
    zone.runOutsideAngular(() => {
      setInterval(() => {
        this.name = 'boob';
      }, 2000);
    })
export class AppComponent {
  name = 'Angular';

  constructor(zone: NgZone) {
    // will trigger change detection
    setInterval(() => {
      this.name = 'boob';
    }, 2000);
  }
内角区:

export class AppComponent {
  name = 'Angular';

  constructor(zone: NgZone) {
    // will not trigger change detection
    zone.runOutsideAngular(() => {
      setInterval(() => {
        this.name = 'boob';
      }, 2000);
    })
export class AppComponent {
  name = 'Angular';

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

每个异步事件都会触发更改检测AFAIK。还要检查:因此,如果它位于Angular应用程序加载的组件内,它将触发更改检测?@StephenRios,这取决于您如何使用它。在我的第一个例子中,它是从组件内部发射的,但在角度区域之外。但一般来说,是的,如果您只是在组件的方法中使用
setInterval
,这些方法是钩子或对事件作出反应的方法,它将安排一个更改检测周期。我认为第二个示例的“不会触发”是一个输入错误,应该是“将触发”。这就是重点,对吗?(我本来打算自己编辑,但我想100%确定我首先理解了。)