2017-12-12 6 views
0

anglefire 2に新しく問題があります。私はfirebaseの雲の中に貯蔵されているレストランのセットを持っています。私は正確にレストランのリストを取得し、それを表示することができていますが、私は別の変数に特定のレストランにアクセスし、保存しようとすると、それは私がからデータを取得するように見えるカントれ、観察を返します。anglefire2スナップショットデータ

items: Observable<any[]>; 
tester: any[] = []; 

private test: AngularFirestoreCollection<any>; 
constructor(db: AngularFirestore){ 
    this.test = db.collection<any>('restaurants') 
    // this.items = db.collection('restaurants').valueChanges(); 
    this.items = this.test.snapshotChanges().map(actions => { 
     return actions.map(a => { 
     const data = a.payload.doc.data(); 
     this.tester.push(data); //This returns an observable instead of an array 
     const id = a.payload.doc.id; 
     return { id, ...data }; 
     }); 
    }); 
} 

getRestaurants(){ 
    return this.items; 
} 

//Here I want to be able to return the item object 
getRestaurant(index){ 
    console.log(this.tester[i]); 
} 

コンポーネントのコード

constructor(private restService: RestaurantService){} 

restaurants = <any>[]; 
selectedRestaurant: any; 

ngOnInit(){ 
    this.restaurants = this.restService.getRestaurants() 
} 

onSelect(index){ 
    console.log(this.restService.getRestaurant(index)); 
} 

イム私はfirebaseから返された観察可能なリストからデータを抽出することができます方法を理解するのに苦労。

+0

snapshot()を使用する必要がありますか? valuechanges()は使いやすいためです。私はあなたに例を挙げることができます – Makah

答えて

0

Observableの「現在の値」を取得する場合は、BehaviorSubjectを使用する必要があります。

restaurants: BehaviorSubject<any[]>; 
private test: AngularFirestoreCollection<any>; 

constructor(db: AngularFirestore){ 
    this.test = db.collection<any>('restaurants') 
    this.test.snapshotChanges().subscribe(this.restaurants); 
} 

getRestaurants(){ 
    return this.restaurants.value(); 
} 

getRestaurant(index){ 
    return getRestaurants()[index]; //.. or whatever you need 
} 
関連する問題