【问题标题】:Casting FirebaseListObservable results to objects将 FirebaseListObservable 结果投射到对象
【发布时间】:2016-11-16 12:34:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案1】:

    您可以使用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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2021-12-21
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      相关资源
      最近更新 更多