2017-11-22 7 views
0

オブジェクトの配列が必要な角度コンポーネントがあります。私はサービスに配列を取得するためのコードを書いた:オブジェクトのある配列からオブジェクトの別の配列に値をコピーするには、typescript、angular 4?

private roles_list = []; 

    getRoles(): any[] { 
     return this.roles_list; 
      } 

    roles(){ 

    const promise = new Promise((resolve, reject) => { 
      return this._http.get('/api/getData') 
       .subscribe(data => { 
        //this.roles_list = data 
        for (var i=0 ; i < Object.keys(data).length ; i++){ 
         var temp = {}; 
         temp["role"] = "role"; 
         temp["value"] = data[i].key; 
         this.roles_list.push(temp); 
        } 

        console.log("data"); 
        console.log(data); 
        console.log("roles_list"); 
        console.log(this.roles_list); 
        resolve(this.roles_list); 
       }, 
       err => { 
        reject(err); 
       }); 
     }); 
    return promise; 
} 

私はその後、コンポーネントで約束を解決しています:

private roles = []; 
this.getDataService.roles().then(res => { 
     console.log(typeof(res)); 

     this.roles = res.map(o => { 
      return {name: o.name,role: o.role} 
     }); 
    }); 

しかし、これは、さまざまなエラーを投げている、それは「マップ・メソッドを言いますresはオブジェクトではない配列でなければなりませんが、{}では使用できません。どんな助けもありがとう。

編集:解決:()を通じてJSONオブジェクトを送信して問題を解決し、コンポーネントのngInit()で処理を行ったが、なぜこの問題が発生したのか誰にも分かりませんか?私たちはオブジェクトの解決を通してのみ送ることができますか?

+0

実際に 'console.log(typeof(res))'は何を記録しますか?実際に 'Observable'を返すことができる時に' Observable'を 'Promise'の中に入れているのはなぜですか?あなたは何を達成しようとしていますか? –

+0

'console.log(typeof(res))' 'オブジェクト'は、配列のようなものを与えるべきではありませんか? Observableについてのあなたの意見はありませんでしたか?私はこのコードで観測値を使用していません! –

+0

あなたのサービスで注入した '_http'インスタンスは、フードの下で 'Observables'を使用します。そのため、実際に' subscribe'メソッドを呼び出して、すべてのメソッド( 'get'、' post'など) 'Response'型の' Observable'を返します。 –

答えて

0

この

private roles = []; 
this.getDataService.roles().then(res => { 
    console.log(typeof(res)); 

    for(let r of res){ 
     this.roles.push({name: r.name,role: r.role}) 
    } 

}); 
+0

「型 '{}'は配列型でも文字列型でもありません」ということは、オブジェクトの配列として考慮する必要がありますが、オブジェクトとしてのresを考慮しています! –

+0

それはどういう考えですか? –

+0

'console.log(res);'と表示されているものを表示してください。 – radoix

0

を試してみて、私はこの問題は、どうやら約束はそれだけのresolveメソッドを介して単一のオブジェクトを渡すことができたものを考え出しました。したがって、オブジェクトの配列を渡すと、そのオブジェクトは単なるオブジェクトと見なされ、明らかに、オブジェクトをオブジェクトの配列に割り当てることはできません。 これを行う方法は、サービス内にオブザーバブルを作成し、コンポーネントでそれを購読することでした。

関連する問題