私はAngular 4アプリを書いています。これには2つのリストが含まれます。最初のリストの要素をクリックすると、結果は新しいビューの2番目のリスト(外部キーを使用)のサブセットになります。私は私のサービス内の関数でid(外部キー)によるフィルタリングを行います。私のコンポーネントでは、私はちょうど 'undefined'を受け取る。 私は、私のサービスでObservableを使用しており、サブセットリストの新しいビューが表示されているときにデータが準備できていないと考えています。私の目標を達成するためにこれを別の方法でどうやって行うことができますか?角度 - 観測可能なデータが準備できていませんか?
マット・テーブルのセルでクリックイベントを経て、私のサービスでメソッドを呼び出す:私のcomponent.ts
の私 service.tsgetItemsByID(id: number): Observable<Item[]> {
return this.http.get('/api/Item').map((response) => {
console.log(id); //shows correct item id
console.log(this.items.filter(iteration => item.item_id === id)); // shows correct array of subset list
return this.items.filter(item=> item.item_id === id);
});
}
方法で
方法
getItem(): void {
const id = +this.route.snapshot.paramMap.get('id');
this.itemService.getItemsByID(id)
.subscribe(response => this.items = response);
console.log(this.items); // shows 'undefined'
}
私のコードからあなたを示すには他に何が必要ですか?
完全なログ:
undefined
4
Array [ {…}, {…}, {…}, {…} ]
どうもありがとう!
は、内部にconsole.log()**を入れ**購読に渡されたコールバック()。 httpは非同期です。それがObservableを返す理由です。それが応答が利用可能になるまでブロックされている場合、それはあなたが観察可能で気にならないでしょう。応答を直接返します。トースターに入れた直後にトーストを食べることはできません。トーストが準備ができていることをトースタが通知すると、それを食べる。 –
問題のトラブルシューティングに役立つ詳細を追加してください。 Angularによって提供される2つのHttpサービスがあります。どのモジュールを使用していますか?あなたの答えは –