Получение данных из объекта Firebase с помощью Angular2, angularfire2 и Typescript
В настоящее время я работаю над проектом с Angular 2 и angularFire2.
Моя база данных выглядит так в Firebase:
база данных:/
[{Name:test1},
{Name:test2},
{Name:test3}]
Все элементы также имеют ключ Firebase.
Теперь я пытаюсь получить данные из Firebase с Observabels из RX.
Когда я это сделаю, я получаю имена в консоли:
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 от элемента
как я могу получить FirebaseKey из элемента в списке?
Ответы
Ответ 1
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));