2017-01-24 10 views
0

私は角2を学んでいて、サービスに加入してデータを返しましたが、今度はfor()をループオーバーする必要がありますので、jsonを配列にプッシュしました。すでに配列ですが、これが正しいかどうかは不明です。サブスクリプションからのデータへのアクセス

は基本的に私は私のコントローラ

public sublocation = []; 
    private subscriptions = []; 
    constructor(private statusService : StatusService) { 

    } 

    public getAllStatusList(){ 
    this.subscriptions.push(
     this.statusService.getStatusAPI() 
     .subscribe(
     data => { 
      this.sublocation.push(data); 
     }, 
     error => console.log('Server Error'), 
    ) 
    ); 
    } 

public getSublocation(){ 
    console.log(this.sublocation); 
    //TRYING TO DO STUFF HERE like if sublocation == london 
} 

JSONサンプル

[ 
    [ 
    { 
     "id": "19", 
     "parentTag": "0", 
     "name": "London", 
     "deliveryType": "E", 
     "enabled": "T", 
     "outageTag": [], 
     "sub": [ 
     { 
      "id": "25", 
      "parentTag": "19", 
      "name": "London::Gatwick", 
      "deliveryType": "E", 
      "enabled": "T", 
      "outageTag": [] 
     } 
     ] 
    } 
    ] 
] 

サービス

export class StatusService { 

    constructor(private http: Http) { 

    } 

    public getStatusAPI(): Observable<any>{ 

    return this.http.get(environment.api) 
     .map((response: Response) => this.getStatusList(response)) 
     .catch((error:any) => Observable.throw(error.json().error || 'Server Error')); 
    } 

    public getStatusList(responseData:any){ 
    let data = []; 
    let res = responseData.json(); 
    for(let prop in res) { 
     data.push(res[prop]) 
    } 
    //console.log(data); 
    return data; 
    } 

} 
+0

これは無効なjsonです。配列[]にはオブジェクト{}があり、配列内に配列があり、{} –

+1

サービスがデータを正確に返す方法と正確に何を行う必要があるかをお伝えください。 –

+0

@SumamaWaheed配列はオブジェクトを持つ必要はありません。配列はネストすることができます。 JSON –

答えて

0

私はassumi上の方法に私の加入データを渡したいですあなたがあなたの質問でJSON(それはもはやJSONではないでしょう)として提示したデータは、ループして配列にプッシュした後のデータです。だから、元の(そして実際の)JSONはおそらく次のようになります。

return this.http.get(environment.api) 
    .map(res => res.json()) 

そして、あなたの中:

[ 
    { 
    "id": "1", 
    "parentTag": "0", 
    "name": "London", 
    "deliveryType": "E", 
    "enabled": "T", 
    "outageTag": [], 
    "sub": [ 
     { 
     "id": "25", 
     "parentTag": "19", 
     "name": "London::Gatwick", 
     "deliveryType": "E", 
     "enabled": "T", 
     "outageTag": [] 
     } 
    ] 
    } 
] 

あなたのループと新しい配列にプッシュが不要であることを意味し、あなただけのこの操作を行うことができますコンポーネントはデータを購読し、好きなことをします。あなたはあなたの質問で、配列をループして位置を確認したいと言いました。あなたが今簡単に配列をループ、上記のように、オブジェクトのあなたの配列内のデータにアクセスすることができます。このソリューションにより

this.statusService.getStatusAPI() 
    .subscribe(d => { 
    this.data = d; 
    this.loopData(); 
    }) 

loopData() { 
    // loop through array 
    this.data.forEach(x => { 
    // check name property of object 
    if(x.name == 'London') { 
     alert('An Object with name London found!'); 
    } 
    }); 
} 

、その後x.namex.parentTagなどのように、オブジェクトのプロパティを参照してください...:だから、このような何かを行います

関連する問題