angular - 将 FirebaseListObservable 结果转换为对象

标签 angular firebase angularfire2

我正在使用 angularfire-beta6。假设我有一个 myHeroes:FirebaseListObservable<Hero[]>并在我的模板中将它与 async 管道一起使用我无法访问 Hero 类中的函数。

<ul>
  <li *ngFor="let hero of myHeroes">
    {{hero.someClassFunction()}}
  </li>
</ul>

这会导致错误:self.context.$implicit.someClassFunction()因为 hero 没有被转换为 Hero 类。我该怎么做?

最佳答案

您可以使用 AngularFireDatabase 上的列表或对象函数从数据库中获取对象或列表。您有 FirebaseListObserver,其中包含一组预定义(不是您的自定义)类的对象。

您必须手动将从 FirebaseListObservable 中的数据库获得的结果映射到自定义类的对象数组。


我想你从数据库中获取你的英雄的函数看起来像这样:

myHeroes(): FirebaseListObservable<Hero[]> {
  return this.db.list('heroes');
}

您可以将结果映射到名为 Heroes 的自定义类的数组中。您可以使用 lambda 表达式或将函数作为参数传递(本示例)。

myHeroes(): Observable<Hero[]> {
  return this.db.list('heroes').map(Hero.fromJsonList);
}

如果您收到 map 不是函数的错误,请添加 import "rxjs/add/operator/map";


在 Hero 类中添加这两个静态函数:

static fromJsonList(array): Hero[] {
  return array.map(Hero.fromJson);
}

//add more parameters depending on your database entries and Hero constructor
static fromJson({id, name}): Hero {
  return new Hero(id, name);
}

关于angular - 将 FirebaseListObservable 结果转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40632308/

相关文章:

Angular 教程,InMemoryWebApiModule 使用 angular-in-memory-web-api 0.6.0 抛出 500 个内部服务器错误

Firebase 消息显示已发送 0 条消息

angular - 对使用 AngularFireAuth 和模拟 authState 的服务进行单元测试

angular - 从子导出 Angular 导航到根?

angular - 如何在 RxJs Observable 构造函数中使用异步调用

angular - 如何处理 session

firebase - 有没有办法仅在数据更改时获取 'value' 事件?

java - 使用 AsyncTask 读取 Firestore 文档

AngularFire2:找不到命名空间 "firebase"

angular material 2 自定义主题按钮对比