NgZone
Сервис с внедрением зависимостей для выполнения задач внутри или вне зоны Angular.
API
class NgZone {
constructor(options: { enableLongStackTrace?: boolean | undefined; shouldCoalesceEventChangeDetection?: boolean | undefined; shouldCoalesceRunChangeDetection?: boolean | undefined; }): NgZone;
readonly hasPendingMacrotasks: boolean;
readonly hasPendingMicrotasks: boolean;
readonly isStable: boolean;
readonly onUnstable: EventEmitter<any>;
readonly onMicrotaskEmpty: EventEmitter<any>;
readonly onStable: EventEmitter<any>;
readonly onError: EventEmitter<any>;
run<T>(fn: (...args: any[]) => T, applyThis?: any, applyArgs?: any[] | undefined): T;
runTask<T>(fn: (...args: any[]) => T, applyThis?: any, applyArgs?: any[] | undefined, name?: string | undefined): T;
runGuarded<T>(fn: (...args: any[]) => T, applyThis?: any, applyArgs?: any[] | undefined): T;
runOutsideAngular<T>(fn: (...args: any[]) => T): T;
static isInAngularZone(): boolean;
static assertInAngularZone(): void;
static assertNotInAngularZone(): void;
}
constructor
NgZone{ enableLongStackTrace?: boolean | undefined; shouldCoalesceEventChangeDetection?: boolean | undefined; shouldCoalesceRunChangeDetection?: boolean | undefined; }
NgZone
hasPendingMacrotasks
booleanhasPendingMicrotasks
booleanisStable
booleanОтсутствие незавершённых микрозадач или макрозадач.
onUnstable
EventEmitter<any>Уведомляет о входе кода в зону Angular. Событие срабатывает первым в ходе цикла виртуальной машины.
onMicrotaskEmpty
EventEmitter<any>Уведомляет об отсутствии новых микрозадач в текущем цикле виртуальной машины. Это сигнал для Angular выполнить обнаружение изменений, в ходе которого могут быть добавлены новые микрозадачи. По этой причине событие может срабатывать несколько раз за один цикл виртуальной машины.
onStable
EventEmitter<any>Уведомляет о том, что последняя onMicrotaskEmpty выполнена и больше нет микрозадач, то есть цикл виртуальной машины скоро будет завершён. Это событие вызывается только один раз.
onError
EventEmitter<any>Уведомляет о переданной ошибке.
run
TСинхронно выполняет функцию fn внутри зоны Angular и возвращает значение, возвращённое функцией.
Выполнение функций с помощью run позволяет повторно войти в зону Angular из задачи, выполненной вне зоны Angular (обычно запущенной с помощью runOutsideAngular).
Все последующие задачи или микрозадачи, запланированные внутри этой функции, продолжат выполняться внутри зоны Angular.
Если возникает синхронная ошибка, она будет повторно выброшена и не будет передана через onError.
(...args: any[]) => T
any
any[] | undefined
T
runTask
TСинхронно выполняет функцию fn в виде задачи внутри зоны Angular и возвращает значение, возвращённое функцией.
Выполнение функций с помощью runTask позволяет повторно войти в зону Angular из задачи, выполненной вне зоны Angular (обычно запущенной с помощью runOutsideAngular).
Все последующие задачи или микрозадачи, запланированные внутри этой функции, продолжат выполняться внутри зоны Angular.
Если возникает синхронная ошибка, она будет повторно выброшена и не будет передана через onError.
(...args: any[]) => T
any
any[] | undefined
string | undefined
T
runGuarded
TРаботает так же, как run, но синхронные ошибки перехватываются и передаются через onError, а не выбрасываются повторно.
(...args: any[]) => T
any
any[] | undefined
T
runOutsideAngular
TСинхронно выполняет функцию fn в родительской зоне Angular и возвращает значение, возвращённое функцией.
Выполнение функций с помощью runOutsideAngular позволяет выйти из зоны Angular и выполнять задачи, которые не запускают обнаружение изменений Angular и не подпадают под обработку ошибок Angular.
Все последующие задачи или микрозадачи, запланированные внутри этой функции, продолжат выполняться вне зоны Angular.
Используйте run, чтобы снова войти в зону Angular и выполнить задачи, обновляющие модель приложения.
(...args: any[]) => T
T
isInAngularZone
booleanЭтот метод проверяет, выполняется ли вызов метода в экземпляре зоны Angular.
boolean
assertInAngularZone
voidПроверяет, что метод вызван внутри зоны Angular; в противном случае выбрасывает ошибку.
void
assertNotInAngularZone
voidПроверяет, что метод вызван вне зоны Angular; в противном случае выбрасывает ошибку.
void
Описание
Сервис с внедрением зависимостей для выполнения задач внутри или вне зоны Angular.
Чаще всего этот сервис используется для оптимизации производительности при запуске задач, состоящих из одной или нескольких асинхронных операций, которые не требуют обновления пользовательского интерфейса или обработки ошибок средствами Angular. Такие задачи можно запускать с помощью runOutsideAngular, а при необходимости повторно войти в зону Angular с помощью run.
Примечания по использованию
Пример
import {Component, NgZone} from '@angular/core';
@Component({
selector: 'ng-zone-demo',
template: `
<h2>Demo: NgZone</h2>
<p>Progress: {{progress}}%</p>
@if(progress >= 100) {
<p>Done processing {{label}} of Angular zone!</p>
}
<button (click)="processWithinAngularZone()">Process within Angular zone</button>
<button (click)="processOutsideOfAngularZone()">Process outside of Angular zone</button>
`,
})
export class NgZoneDemo {
progress: number = 0;
label: string;
constructor(private _ngZone: NgZone) {}
// Loop inside the Angular zone
// so the UI DOES refresh after each setTimeout cycle
processWithinAngularZone() {
this.label = 'inside';
this.progress = 0;
this._increaseProgress(() => console.log('Inside Done!'));
}
// Loop outside of the Angular zone
// so the UI DOES NOT refresh after each setTimeout cycle
processOutsideOfAngularZone() {
this.label = 'outside';
this.progress = 0;
this._ngZone.runOutsideAngular(() => {
this._increaseProgress(() => {
// reenter the Angular zone and display done
this._ngZone.run(() => { console.log('Outside Done!'); });
});
});
}
_increaseProgress(doneCallback: () => void) {
this.progress += 1;
console.log(`Current progress: ${this.progress}%`);
if (this.progress < 100) {
window.setTimeout(() => this._increaseProgress(doneCallback), 10);
} else {
doneCallback();
}
}
}
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/core/NgZone