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%确定我首先理解了。)