2017-01-06 4 views
1
import { Injectable } from '@angular/core'; 
import { AngularFire, FirebaseListObservable } from 'angularfire2'; 

import 'rxjs/add/operator/find'; 



@Injectable() 
export class TeamService { 
teams: FirebaseListObservable<any> = this.af.database.list('/teams', {  preserveSnapshot: true }); 
constructor(public af: AngularFire) { 

} 

TeamByKey(key) { 
    return this.teams.find((teams: any) => { 
     for (let team of teams) { 
      if (team.key == key) 
       return true; 
     } 
     return false; 
    }) 
} 
} 

Я хочу получить команду, когда найду хороший ключ. Но функция возвращает весь список.Извлечь предмет из FirebaseListObservable используя наблюдаемый

ответ

0

Величина, излучаемая наблюдаемым AngularFire2 list, представляет собой массив. Оператор find находит испущенные значения, которые соответствуют предикату, поэтому, когда вы находите team и возвращаете true, оператор find соглашается с найденным значением teams, поэтому весь список команд испускается.

Чтобы испускают только команду соответствия, используйте map оператора и Array.prototype.find метод:

import 'rxjs/add/operator/map'; 
... 
TeamByKey(key) { 
    return this.teams.map((teams: any[]) => teams.find((team: any) => team.key === key)); 
} 
+0

спасибо, я хорошо понимаю теперь, – drtapha