2016-11-16 1 views
3

Я использую angularfire-beta6. Предположим, у меня есть myHeroes:FirebaseListObservable<Hero[]> и используйте его с async -pipe в моем шаблоне Я не могу получить доступ к функциям из класса Hero.Casting FirebaseListОбщие результаты по объектам

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

Вы можете отобразить результат в массив пользовательского класса под названием Heroes. Вы можете использовать лямбда-выражение или передать функцию в качестве параметра (этот пример).

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

В случае, если вы получаете сообщение об ошибке, что карта не является функцией, добавить 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); 
}