在显示数据之前使用 NgZone 执行多个 HTTP 请求
runOutsideAngular
可用于在 Angular 2 之外运行代码,以便它不会不必要地触发更改检测。这可以用于例如运行多个 HTTP 请求以在呈现之前获取所有数据。要在 Angular 2 中再次执行代码,可以使用 NgZone
的 run
方法。
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];
});
});
});
});
});
}
}