Spec-Zone.ru › Angular

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
@paramoptions{ enableLongStackTrace?: boolean | undefined; shouldCoalesceEventChangeDetection?: boolean | undefined; shouldCoalesceRunChangeDetection?: boolean | undefined; }
@returnsNgZone

hasPendingMacrotasks

boolean

hasPendingMicrotasks

boolean

isStable

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.

@paramfn(...args: any[]) => T
@paramapplyThisany
@paramapplyArgsany[] | undefined
@returnsT

runTask

T

Синхронно выполняет функцию fn в виде задачи внутри зоны Angular и возвращает значение, возвращённое функцией.

Выполнение функций с помощью runTask позволяет повторно войти в зону Angular из задачи, выполненной вне зоны Angular (обычно запущенной с помощью runOutsideAngular).

Все последующие задачи или микрозадачи, запланированные внутри этой функции, продолжат выполняться внутри зоны Angular.

Если возникает синхронная ошибка, она будет повторно выброшена и не будет передана через onError.

@paramfn(...args: any[]) => T
@paramapplyThisany
@paramapplyArgsany[] | undefined
@paramnamestring | undefined
@returnsT

runGuarded

T

Работает так же, как run, но синхронные ошибки перехватываются и передаются через onError, а не выбрасываются повторно.

@paramfn(...args: any[]) => T
@paramapplyThisany
@paramapplyArgsany[] | undefined
@returnsT

runOutsideAngular

T

Синхронно выполняет функцию fn в родительской зоне Angular и возвращает значение, возвращённое функцией.

Выполнение функций с помощью runOutsideAngular позволяет выйти из зоны Angular и выполнять задачи, которые не запускают обнаружение изменений Angular и не подпадают под обработку ошибок Angular.

Все последующие задачи или микрозадачи, запланированные внутри этой функции, продолжат выполняться вне зоны Angular.

Используйте run, чтобы снова войти в зону Angular и выполнить задачи, обновляющие модель приложения.

@paramfn(...args: any[]) => T
@returnsT

isInAngularZone

boolean

Этот метод проверяет, выполняется ли вызов метода в экземпляре зоны Angular.

@returnsboolean

assertInAngularZone

void

Проверяет, что метод вызван внутри зоны Angular; в противном случае выбрасывает ошибку.

@returnsvoid

assertNotInAngularZone

void

Проверяет, что метод вызван вне зоны Angular; в противном случае выбрасывает ошибку.

@returnsvoid

Описание

Сервис с внедрением зависимостей для выполнения задач внутри или вне зоны 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API