2017-02-22 6 views
3

現在、最初のAngularFire2アプリケーションで作業しています。 Firebaseの私の構造と一致するTypescriptクラスがあります。希望このため、コンストラクタに文字列:私はちょうど公開鍵を追加することはできません私のプレイヤオブジェクトでplayerkeyをしたい場合は

私firebase構造

-players 
|-playerkey 
    |-name 

と私のクラスは

export class Player { 
    constructor(public name: string) {} 
} 

です私がどのプレイヤーオブジェクトをファイヤーベースに押し付けないようにする。

独自のクラスとオブジェクトでAngularFire2を使用する適切な方法はありますか?

FirebaseObjectObservableを使用してサービス間でPlayerオブジェクトを渡す必要がありますか?私が知る限り、自分でFirebaseObjectObservableを作成することはできません。私は火の基盤からそれを取得する必要があります。

答えて

3

あなたは、このようにそれを行うことができます。

export class Player { 
    constructor(public $key: string, public name: string) { 
    } 

    static fromJson({ $key, name }) { 
     return new Player($key, name); 
    } 

    static fromJsonArray(json: any[]): Player[] { 
     return json.map(Player.fromJson); 
    } 
} 

はプレーヤーインスタンスとすべてのプレイヤーを取得します。

playerService.ts

import { Injectable } from "@angular/core"; 
import { Observable } from "rxjs"; 
import { AngularFireDatabase } from 'angularfire2'; 
import { Player } from 'path/to/player.ts' 

@Injectable() 
export class playerService { 
    constructor(private afd: AngularFireDatabase) {} 

    getPlayers(): Observable<Player[]> { 
     return this.afd.list(`players`).map(Player.fromJsonArray); 
    } 

    savePlayer(player: Player): Observable<any> { 
     // your code to save a player 
    } 
} 

コンポーネント

yourComponent.ts

savePlayer(name: string) { 
    let player = Player.fromJson({ name: name }); 
    delete player.$key; 

    this.playerService().savePlayer(player).subscribe(); 
} 
+0

プレーヤーのコンストラクタでこのメソッドを追加しますか?それが私たちが本当に違うのです。私は放出された 'FirebaseObjectObservable'を保存しています。私のコンストラクタは '(プライベートdbObject:FirebaseObjectObservable)'です。これは、基本的にその内側のオブジェクトの周りのラッパーです。 (実際に私はその内部観察可能な専用インターフェイスを持っています)。私は 'get key(){return this.dbObject。$ key}'と言うでしょう。誰もが私たちの分散の長所と短所を知っていますか?それはTransfer vs Wrapのようなものです – Clark

+0

@Clark私たちの実装を比較できるようにあなたの答えを投稿できますか?ありがとう – Karuban

+0

'Observable <>'は 'FirebaseObjectObservable <>'と 'FirebaseListObservable <>'と同じ機能を持っています。 –

関連する問題