Spec-Zone.ru › Angular 2

NgZone

Experimental Class

Обзор класса

class NgZone {
  static isInAngularZone() : boolean
  static assertInAngularZone() : void
  static assertNotInAngularZone() : void
  constructor({enableLongStackTrace = false}: any)
  
  
  run(fn: () => any) : any
  runGuarded(fn: () => any) : any
  runOutsideAngular(fn: () => any) : any
  onUnstable : EventEmitter<any>
  onMicrotaskEmpty : EventEmitter<any>
  onStable : EventEmitter<any>
  onError : EventEmitter<any>
  isStable : boolean
  hasPendingMicrotasks : boolean
  hasPendingMacrotasks : boolean
}

Описание класса

Инъективный сервис для выполнения работы внутри или вне зоны Angular.

Наиболее распространенное использование этого сервиса — оптимизация производительности при запуске работы, состоящей из одной или нескольких асинхронных задач, которые не требуют обновлений пользовательского интерфейса или обработки ошибок Angular. Такие задачи могут быть инициированы с помощью runOutsideAngular, а при необходимости эти задачи могут войти в зону Angular с помощью run.

Пример

import {Component, NgZone} from '@angular/core';
import {NgIf} from '@angular/common';

@Component({
  selector: 'ng-zone-demo'.
  template: `
    <h2>Demo: NgZone</h2>

    <p>Progress: {{progress}}%</p>
    <p *ngIf="progress >= 100">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();
    }
  }
}

Конструктор

constructor({enableLongStackTrace = false}: any)

Статические члены

isInAngularZone() : boolean
assertInAngularZone() : void
assertNotInAngularZone() : void

Подробное описание класса

run(fn: () => any) : any

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

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

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

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

runGuarded(fn: () => any) : any

Аналогично run, за исключением того, что синхронные ошибки捕获 и перенаправляются через onError и не перевыбрасываются.

runOutsideAngular(fn: () => any) : any

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

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

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

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

onUnstable : EventEmitter<any>

Уведомляет о входе кода в зону Angular. Это происходит первым на этапе VM Turn.

onMicrotaskEmpty : EventEmitter<any>

Уведомляет о том, что больше нет микрозадач в очереди на текущем этапе VM Turn. Это подсказка для Angular выполнить обнаружение изменений, которое может добавить больше микрозадач. По этой причине это событие может вызываться несколько раз за один VM Turn.

onStable : EventEmitter<any>

Уведомляет о том, что последняя onMicrotaskEmpty была запущена, и больше нет микрозадач, что подразумевает, что мы собираемся уступить VM Turn. Это событие вызывается только один раз.

onError : EventEmitter<any>

Уведомляет о том, что ошибка была доставлена.

isStable : boolean

Указывает, есть ли незавершенные микрозадачи или макрозадачи.

hasPendingMicrotasks : boolean
hasPendingMacrotasks : boolean

экспортировано из @angular/core/index, определено в @angular/core/src/zone/ng_zone.ts

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v2.angular.io/docs/ts/latest/api/core/index/NgZone-class.html

Spec-Zone.ru

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