2017-10-08 11 views
0

私は現在、googles firebaseで何かを構築しようとしています。問題を見つけました。それは firebaseデータベースでIDを取得する

(少なくとも、それはそれは私が読んチュートリアルでやったことだ)あなたのデータベース内のオブジェクトのキーとして$キーを持つオブジェクトを与えるために使用されるコードのこのスニペットが

export class FirebaseService { 
    items: Observable<Item[]>; 

    constructor(private db: AngularFireDatabase){ 

    } 

    getBusinesses(){ 
     this.businesses = this.db.list('/items').valueChanges() as Observable<Item[]> 
     return this.items; 
    } 

} 

ようです問題は、$キーが定義されていないと、私はキーを含むオブジェクトを返すlistメソッドを取得する方法、私は不思議だった。しばらくの間、試してみましたが、私は本当にエラーを見つけることはできません。誰かが答えを知っていたらうれしいです。

[編集]

https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md これは私の解決策に少し近づけます。バージョン5.0.0では、angularfire2に大きな変更が加えられているようです。しかし、私はまだ学んでいるので、私は実際に自分のコードにそれを統合することはできません。現時点ではこの

firebase.service.ts

import { Injectable } from '@angular/core'; 
import { AngularFireModule } from 'angularfire2'; 
import { AngularFireDatabase, AngularFireDatabaseModule } from 'angularfire2/database'; 
import { FirebaseListObservable } from 'angularfire2/database-deprecated'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import {Business} from '../Business'; 
import {Category} from '../Category'; 

@Injectable() 
export class FirebaseService { 
    businesses : Observable<Business[]>; 
    categories : Observable<Category[]>; 

    constructor(private db: AngularFireDatabase){ 

    } 

    getBusinesses(){ 
     this.businesses = this.db.object('/businesses').snapshotChanges().map(action => { 
      console.log('ACTION:'); 
      console.log(action); 
      const $key = action.payload.key; 
      const data = {$key, ...action.payload.val()}; 
      return data; 
     }) as Observable<Business[]>; 
     return this.businesses; 
    } 
} 

のように見え、

import { Component, OnInit } from '@angular/core'; 
import { AngularFireDatabase } from 'angularfire2/database'; 
import { Observable } from 'rxjs/Observable'; 
import { FirebaseService } from './services/firebase.service'; 
import { Business } from './Business'; 
import { Category } from './Category'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent { 
    title = 'app'; 
    items: Observable<any[]>; 
    businesses: Business[]; 
    categories: Category[]; 
    appState: string; 
    activeKey: string; 

    constructor(private _firebaseService: FirebaseService){ 

    } 

    ngOnInit(){ 
     this._firebaseService.getBusinesses().subscribe(businesses => { 
      console.log('Businesses:'); 
      console.log(businesses); 
      this.businesses = businesses; 
     }); 
    } 


} 

私はそれがあった望んだとして今私の結果ではありませんがapp.component.ts。基本的には私が戻ってくるのは

{ 
    0: { 
     Key01: "xyz", 
     Key02: "yyy" 
    }, 
    1: { 
     Key11: "zyx", 
     Key12: "zzz" 
    }, 
    $key: "businesses" 
} 

私は試し続けます。たぶんあなたは私が間違っていることを知っているかもしれない。助けてくれてありがとう今のところ

[/編集]あなたがFirebaseListObservable<Item[]>などの項目を宣言し、(getBusinessesを行う必要があり

+0

.object()で.list()を置き換えれば、残念ながらそのオブジェクトを取得することができます(したがって、そのキーは – Wandrille

+0

)。キーなしでオブジェクトを取得しています – Chris

答えて

0

)以下のように呼び出します。

this.items= this.af.list('/items') as FirebaseListObservable<Item[]>; 

希望これはあなたが得るのを助けます$ keyの値

+0

残念ながらFirebaseListObservableをインポートできません。それは 'angularfire2'でも 'agularfire2/database'でも見つからない。私はバージョン5.0.0を使用しています。私は別のものを使うべきですか? [編集]私はrxjs/Observableをhttps://stackoverflow.com/questions/43799052/angularfire-and-firebaselistobservable-has-no-exported-member-angularfire2-として使っているようですFirebasListObservableは推奨されていません。 :/ – Chris

+0

OK、私は一歩近づいています。 https://github.com/angular/angularfire2/blob/master/docs/version-5-upgrade.md これはもう少し明確になりましたが、私はまだサービスとアプリケーションを変更する方法を理解できません。成分。私はここでそれを記述するのが難しいので私の質問を編集します – Chris

関連する問題