Загрузка...
Загрузка...
Продолжая работу с платформой, вы принимаете условия Политики конфиденциальности и использование файлов cookie.
NgZone — это сервис в Angular, который используется для управления зонами выполнения (execution context) и запуска change detection (обнаружения изменений). Он основан на библиотеке zone.js и позволяет Angular отслеживать все асинхронные операции, такие как setTimeout, Promise, XHR и т.д.
Angular использует NgZone, чтобы:
click, HTTP, setTimeout);Когда происходит асинхронное событие (например, setTimeout, fetch, input), Angular автоматически:
NgZone;Change Detection для обновления UI.import { Component, NgZone } from '@angular/core';
@Component({
selector: 'app-zone-demo',
template: `<p>{{progress}}%</p>`
})
export class ZoneDemoComponent {
progress = 0;
constructor(private ngZone: NgZone) {}
startProgress() {
this.progress = 0;
this.increaseProgress();
}
// Без выхода из зоны — будет вызывать change detection каждый шаг
increaseProgress() {
if (this.progress < 100) {
setTimeout(() => {
this.progress += 1;
this.increaseProgress();
}, 10);
}
}
}
Иногда вам не нужно вызывать change detection слишком часто. В этом случае можно использовать runOutsideAngular():
this.ngZone.runOutsideAngular(() => {
this.progress = 0;
const timer = setInterval(() => {
this.progress += 1;
if (this.progress >= 100) {
clearInterval(timer);
// Вернуться обратно в Angular-зону, чтобы обновить UI
this.ngZone.run(() => {
console.log("Завершено!");
});
}
}, 10);
});
runOutsideAngular() — запускает код вне зоны Angular, так что change detection не триггерится каждый раз.run() — вручную возвращаемся в Angular-контекст и инициируем обновление UI.| Что делает NgZone? | Преимущества |
|---|---|
| Отслеживает асинхронные операции | Автоматическое обновление UI |
| Запускает Change Detection | Удобно при взаимодействии с DOM |
Позволяет выйти из зоны (runOutsideAngular) | Повышение производительности |
| Позволяет вручную вернуться в Angular-зону | Контроль над обновлением интерфейса |