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

Posted

技术标签:

【中文标题】使用 Angular2、angularfire2 和 Typescript 从 Firebase 对象中获取数据【英文标题】:Getting Data out of Firebase Object with Angular2, angularfire2 and Typescript 【发布时间】:2016-11-10 13:45:02 【问题描述】:

我目前正在使用 Angular 2 和 angularFire2 进行项目。 我的数据库在 Firebase 中如下所示: 基础:/数据

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

所有项目也都有 Firebase 密钥。

现在我正在尝试使用来自 RX 的 Observabel 从 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】:

Observables 是一个异步数据结构,这意味着您实际上并不知道数据何时可用,您必须订阅Observable 并等待@987654323 中的数据可用@处理程序。

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

【讨论】:

谢谢你,这对我很有帮助。 如果你想循环遍历项目,而不仅仅是第一个? @Lloyd 那么您将使用flatMap 而不是first 你有 flatMap 在那里。所以就先把 first() 拿出来? 是的,在这种情况下只需删除first

以上是关于使用 Angular2、angularfire2 和 Typescript 从 Firebase 对象中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angularfire2 Angular2 中对 FirebaseListObservable 列表进行排序?

Angularfire2 在 Angular2 中导致 SystemJS 错误

Angularfire2:“location.protocol”必须是 http 或 https(一个 Meteor 应用程序)

使用 angularfire2 时如何访问本机 Firebase 对象?

Angular 2 和 Angularfire2 中的三向绑定

canActivate 在订阅更改时不响应 Angular 2 路由器 AngularFire2