根据标题,我很好奇是否每次我使用setIntervalif创建间隔,因为 Angular 进行了匀场,如果每次间隔运行时都会创建一个更改检测事件。
我一直在阅读我能找到的所有文档,但我找不到明确的答案。
为了澄清起见,我的问题是,如果我运行以下代码,间隔的每次迭代是否会触发更改检测事件并导致 Angular 尝试更新应用程序的视图,直到满足条件?
let myInterval = setInterval( () => {
if (conditionsAreMet()){
clearInterval(myInterval);
}
})
Run Code Online (Sandbox Code Playgroud)
这取决于使用的区域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)
| 归档时间: |
|
| 查看次数: |
2628 次 |
| 最近记录: |