在使用 Angular 应用程序时,如果您使用 setTimeout 来延迟某些处理,则可能会发现视图更新也会被延迟。这是因为 Angular 在定期检查变化时可能会错过延迟的更改。为了解决这个问题,可以使用 ngZone 服务来确保 Angular 知道变更,并立即更新视图。下面是使用 ngZone 的示例代码:
import { Component, NgZone } from '@angular/core';
@Component({
selector: 'app-root',
template: `
My App
Time remaining: {{ timeRemaining }}
`
})
export class AppComponent {
timeRemaining = 10;
constructor(private ngZone: NgZone) {}
startTimer() {
setTimeout(() => {
this.timeRemaining--;
if(this.timeRemaining > 0) {
this.ngZone.run(() => {
this.startTimer();
});
}
}, 1000)
}
}
在上面的代码示例中,当我们点击“Start Timer”按钮时,它会使用 setTimeout 来启动一个计时器,每秒减少 timeRemaining 的值。在变化之后,它使用 ngZone.run() 来通知 Angular 更新视图,以确保变化立即反映在 UI 上。这将确保视图更新不会被延迟,并立即反映应用程序状态的变化。