私は現在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を取得するにはどうすればよいですか?
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));