web-dev-qa-db-ja.com

Angular2、angularfire2、Typescriptを使用してFirebaseオブジェクトからデータを取得する

私は現在Angular 2とangularFire2でプロジェクトに取り組んでいます。私のデータベースはFirebaseで次のようになります:base:/ data

[{Name:test1},
{Name:test2},
{Name:test3}]

すべてのアイテムにはFirebaseキーもあります。

RXからObservabelsを使用してFirebaseからデータを取得しようとしています。これを行うと、コンソールに名前が表示されます。

let items= af.database.list('/data').map(i=>{return i});
items.forEach(i=>i.forEach(e=>(console.log(e.name))));

出力:test1、test2、test3。すべてが機能します。

しかし、これを行うと:

console.log(items.first());

FirebaseListObservableが返されます。

FirebaseListObservableから最初のオブジェクトのみを取得するにはどうすればよいですか?リスト内のアイテムを編集するにはどうすればよいですか?お気に入り:

items[0].name=test3

また、アイテムからFirebase Keyを取得する方法

リスト内のアイテムからfirebaseKeyを取得するにはどうすればよいですか?

12
jufabeck2202

Observablesは非同期データ構造です。つまり、データがいつ利用可能になるかは実際にはわかりません。Observableにサブスクライブし、データが利用可能になるまで待つ必要があります。 nextハンドラ。

items.first().subscribe(x => console.log(x.name));

さらに、Observableは静的ではないため、そのようにインデックスを付けることはできません。最初の項目のみが必要な場合は、代わりに値を抽出し、flatMap + first + mapの組み合わせで変更することをお勧めします。

af.database.list('/data')
  //Convert array into Observable and flatten it
  .flatMap(list => list)
  //Get only the first item in this list
  .first()
  //Transform the value
  .map(({name, firebaseKey}) => ({name: "test3", firebaseKey}))
  //Subscribe to the stream
  .subscribe(x => console.log(x));
16
paulpdaniels