2017-07-12 14 views
0

http getを使用してjsonファイルを読み込もうとしていますが、エラーが発生しています。Angular2:httpを使用してJSONファイルを取得する

Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

間違っているものに私を助けてください。

参照のため、

<tbody> 
<tr *ngFor="let t of empdata"> 
<td>{{t.wwid}}</td> 
<td>{{t.name}}</td> 
<td></td> 
<td></td> 
<td></td> 
<td>{{t.idsid}}</td> 
<td></td> 
</tr> 
</tbody> 

folder structure

ご参考のため、コードのJSON形式およびこの

{ 
"Employee": 
[ 
    { 
    "name": "Karthik Shekhar", 
    "wwid": "11597210", 
    "idsid": "kshekh1x", 
    "costCenterCode": "80790", 
    "mgrWWID": "10693268", 
    "orgUnit": "67926" 
    }, 
    { 
    "name": "Aneesur Rahman", 
    "wwid": "11744439", 
    "idsid": "aneesurx", 
    "costCenterCode": "32406", 
    "mgrWWID": "10693268", 
    "orgUnit": "67926" 
    }, 
    { 
    "name": "Ashutosh Pandey", 
    "wwid": "11691980", 
    "idsid": "ashuto3x", 
    "costCenterCode": "32406", 
    "mgrWWID": "10693268", 
    "orgUnit": "67926" 
    }, 
] 
} 
ですべての問題ならば、私はわからない以下のHTML部分を追加
import { Component } from '@angular/core'; 
import { Observable } from 'rxjs/Rx'; 
import { Http, Headers, RequestOptions, Response } from '@angular/http'; 

import { peopleService } from './PeopleService'; 


@Component({ 
selector: 'my-app', 
templateUrl: './app.component.html', 
//providers: [peopleService] 
}) 

export class AppComponent { 
//jsonFile: string = './EmployeeHeader.json'; 
empdata: Observable<Array<any>>[]; 

constructor(private http: Http) { 
    this.http.get('../assets/EmployeeHeader.json') 
     .map(Response => Response.json()) 
     .subscribe(empdata => this.empdata = empdata, error => console.log(error)); 
    //this.empdata = service.getPeople(); 
    //console.log('Data is: ' + this.empdata); 
} 
} 

+0

のようなあなたのサービス* ngforに:あなたは、あなたのオブジェクトにEmployeeプロパティにアクセスする必要がありますあなたのhtmlの部分? – amin89

+0

これは、 'ngFor'が配列のようなiterableにバインドし、オブジェクトではないためです。回避策の1つは、 'this.empdata = [empdata]'です。しかし、これより良い解決策がたくさんあります。また、APIとHTMLの 'ngFor'構造体から得た応答を共有することができますか? –

+0

フォルダ構造を共有できますか?私はあなたのHTTP GETそれは誤り –

答えて

2

empdataはオブジェクトであり、配列ではありません。

constructor(private http: Http) { 
    this.http.get('../assets/EmployeeHeader.json') 
     .map(Response => Response.json()) 
     .subscribe(empdata => { 
      //access Employee property 
      this.empdata = empdata.Employee 
     }, error => console.log(error)); 
} 
+0

ドロップダウンに基づいて入力フィールドを自動補完するために、このJSONデータバインドを取得するにはどのように任意のアイデアを共有する共有してください。たとえば、ドロップダウンで_name_を選択すると、すべてのEmployee.name値が表示されます。 _wwid_には、すべてのEmployee.wwid値などが表示されます。 – Aneez

0

変更するには、実装するにはどうすればよい

this.http.get('../assets/EmployeeHeader.json') 
      .map(Response => Response.json()) 
      .subscribe(empdata => {this.empdata = empdata.Employee} 
    , error => console.log(error)); 

または 変更* ngFor以下に

<tbody> 
<tr *ngFor="let t of empdata.Employee"> 
<td>{{t.wwid}}</td> 
<td>{{t.name}}</td> 
<td></td> 
<td></td> 
<td></td> 
<td>{{t.idsid}}</td> 
<td></td> 
</tr> 
</tbody> 
+1

htmlでは、SubscribeコールですでにEmployeeを割り当てているため、Employeeへの参照は必要ありません。 –

+0

それが割り当てられていない場合はそれが必要なので、私が言及した理由、または私の答えで –

+0

ああ。私はhtmlが継続して追加されたと思った。 –

関連する問題