【问题标题】: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);
}