首页 文章

使用Angular2,angularfire2和Typescript从Firebase对象中获取数据

提问于
浏览
12

我目前正在使用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密钥

我如何从列表中的项目获取firebaseKey?

1 回答

  • 16

    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));
    

相关问题