2016-11-16 134 views
3

我正在使用angularfire-beta6。假设我有一个myHeroes:FirebaseListObservable<Hero[]>,并在我的模板中使用async -pipe我无法访问Hero类中的函数。将FirebaseListObservable投射到对象

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

这会产生一个错误:self.context.$implicit.someClassFunction()因为英雄没有投到英雄级别。我会怎么做?

回答

4

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

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


我假设你的功能,让您的英雄从数据库看起来是这样的:

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

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

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

如果你得到一个错误的地图是不是一个函数,添加import "rxjs/add/operator/map";


在英雄类添加这两个静态函数:

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