2017-09-07 16 views
1

在Angular 2+(4.3.6)中我使用帶有REST API的新HttpClient。 API返回定義爲一個JSON對象如下:從api響應創建可觀察數組

{ 
    count: number, 
    results: MyObject[] 
} 

以我API服務我有以下函數來檢索數據:

public getList(): Observable<ApiResponse> { 
return this.http.get<ApiResponse>(url); } 

在我的應用程序組件我想顯示的數據數組中的對象使用「異步」管道。爲此我有一個名爲結果

results: Observable<MyObject[]>; 

,並在初始化函數變量

ngOnInit() { 
    this.results = this.myService.getList(); 
} 

,最後在模板

<div *ngFor="let item of results | async"> 
      {{ item.id }} 
</div> 

我很新的角度,不能弄明白如何使用異步管道訪問結果數組而不創建本地對象,如:

temp: MyObject[]; 
ngOnInit() { 
    this.temp = this.myService.getList().subscribe(data => this.temp = data.results); 
} 

有誰知道如何做到這一點?

+0

這就是它或多或少的工作原理。 'http request' - >'observable' - >'subscription' ---> data –

回答

0

這是map操作是什麼 - 它可以讓你創建一個可觀察的基礎上的另一個轉變:

import "rxjs/add/operator/map";  

this.results = this.myService.getList().map(res => res.results); 

然後,您可以通過異步管道或訂閱訪問此。

+0

好奇,看看他們是否真的在尋找。聽起來像是他們想跳過組件內部的觀察點。他們仍然需要將其創建爲本地對象。 –

+0

@ Z.Bagley:是的,這個問題並不是完全清楚他們是想完全跳過課程領域,還是隻是避免手動訂閱和提取價值。我假設後者,但如果它最終成爲前者,我會刪除/編輯我的答案。 –

0

我不完全得到的問題,所以我會重寫你可能錯誤:

1 - 您服務返回可觀察到的,這意味着你應該訂閱它並將其值設置爲訂閱:

ngOnInit() { 
    this.myService.getList().subscribe(list => this.results = list); 
} 

2 - 既然你這樣做,你應該輸入你的結果作爲結果(或您的customObject)

results: MyObject[]; 

3 - 角度響應返回,你需要一個自定義對象在返回之前映射:

return this.http.get(url).map(r => r.json() ? r.json() : r); 

之後,在您的HTML中,異步管道應該工作。