2017-05-11 154 views
0

我在我的控制檯中收到錯誤,當我試圖獲取對象內的對象的數據,並不知道什麼是正確的映射到返回我需要的數據的數組,在這種情況下是results獲取對象內的對象數組 - 嘗試差異'[對象對象]'錯誤'

這裏是我的JSON文件的外觀:

{ 
"count": 101, 
"results": //this is an array[ 
    object 1, 
    object 2,.... 
} 

我的服務電話:

getData(){ 
     return this._http.get('url') 
     .map((res:Response) => res.json()) 
     .catch(this.handleError); 
    } 

我的組件文件:

getData(){ 
    this.service.getData().subscribe(
     data => this.results = data, 
     error => this.errorMessage = <any>error 
    ); 
    } 

HTML:

<tr *ngFor="let item of results"> 
    <td><a style="cursor: pointer">{{item.title}}</a></td> 
</tr> 

回答

2

你應該訪問results對象內部results陣列,所以ngFor的樣子,

<tr *ngFor="let item of results.results"> 
    <td><a style="cursor: pointer">{{item.title}}</a></td> 
</tr> 
+0

我已經試過了,但我得到這個控制檯錯誤:'嘗試差異'[對象對象]'' – bluePearl

+0

你嘗試了以上? – Sajeetharan

+0

我不確定是否必須在我的映射中更改某些內容,一旦我獲得數據直接獲取結果對象 – bluePearl

0

您應該使用async管觀測到Template:

<tr *ngFor="let item of (service.getData() | async).results"> 
    <td><a style="cursor: pointer">{{item.title}}</a></td> 
</tr> 

我認爲你的錯誤來自resultsundefined如果請求尚未完成或失敗。使用async管道將刪除此問題。

如果你仍然想在你的組件來處理錯誤,你可以像它:

組件:

public getServiceData:Observable<any>{ 
    return this.service.getData().catch(err => this.errorMessage = <any>err); 
} 

HTML:

<tr *ngFor="let item of (getServiceData() | async).results"> 
    <td><a style="cursor: pointer">{{item.title}}</a></td> 
</tr>