使用Angular2、angularfire2和Typescript从Firebase对象中获取数据
我目前正在从事Angular2和angularFire2的项目。 在Firebase中,我的数据库如下所示: 基:/data使用Angular2、angularfire2和Typescript从Firebase对象中获取数据,angular,firebase,firebase-realtime-database,rxjs,angularfire2,Angular,Firebase,Firebase Realtime Database,Rxjs,Angularfire2,我目前正在从事Angular2和angularFire2的项目。 在Firebase中,我的数据库如下所示: 基:/data [{Name:test1}, {Name:test2}, {Name:test3}] 所有物品都有Firebase钥匙 现在,我正试图通过RX的观测标签从Firebase获取数据。 执行此操作时,我会在控制台中获取名称: let items= af.database.list('/data').map(i=>{return i}); items.forEach(i
[{Name:test1},
{Name:test2},
{Name:test3}]
所有物品都有Firebase钥匙
现在,我正试图通过RX的观测标签从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获取第一个对象?
如何编辑列表中的项目?比如:
items[0].name=test3
我如何从物品中获取Firebase密钥
如何从列表中的项目中获取firebaseKey?
可观察数据
是一种异步数据结构,这意味着您实际上不知道数据何时可用,您必须订阅可观察数据
,并等待数据在下一个处理程序中可用
items.first().subscribe(x => console.log(x.name));
此外,可观察的
不是静态的,因此不能将其作为索引。如果您只需要第一项,那么我建议您提取值并使用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));
谢谢,这对我真的很有帮助。如果你想循环这些项目,而不仅仅是第一个项目呢?@Lloyd,那么你会使用flatMap
而不是first
你有flatMap。那么只需取出first()?是的,在这种情况下只需删除first