2016-11-16 137 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); 
}