Angular 2
Zone.js
サーチ…
NgZoneへの参照を取得する
NgZone
参照は、依存性注入(DI)を介して注入することができます。
my.component.ts
import { Component, NgOnInit, NgZone } from '@angular/core';
@Component({...})
export class Mycomponent implements NgOnInit {
constructor(private _ngZone: NgZone) { }
ngOnInit() {
this._ngZone.runOutsideAngular(() => {
// Do something outside Angular so it won't get noticed
});
}
}
NgZoneを使用してデータを表示する前に複数のHTTPリクエストを行う
runOutsideAngular
を使用すると、Angular 2以外のコードを実行して、不必要な変更検出をトリガーしないようにすることができます。これは、例えば、レンダリングする前にすべてのデータを取得するために複数のHTTP要求を実行するために使用できます。 Angular 2の内部で再度コードを実行するには、 NgZone
run
メソッドをNgZone
できます。
my.component.ts
import { Component, OnInit, NgZone } from '@angular/core';
import { Http } from '@angular/http';
@Component({...})
export class Mycomponent implements OnInit {
private data: any[];
constructor(private http: Http, private _ngZone: NgZone) { }
ngOnInit() {
this._ngZone.runOutsideAngular(() => {
this.http.get('resource1').subscribe((data1:any) => {
// First response came back, so its data can be used in consecutive request
this.http.get(`resource2?id=${data1['id']}`).subscribe((data2:any) => {
this.http.get(`resource3?id1=${data1['id']}&id2=${data2}`).subscribe((data3:any) => {
this._ngZone.run(() => {
this.data = [data1, data2, data3];
});
});
});
});
});
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow