2017-02-22 26 views
3

目前正在使用我的第一個AngularFire2應用程序。 我有與Firebase中的結構匹配的Typescript類。

我的火力結構

-players 
|-playerkey 
    |-name 

和我的課是

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

如果我想在我的播放器對象的playerkey我不能只是添加公鑰:字符串構造函數,因爲這會阻止我將任何玩家對象推送到Firebase。

有沒有什麼適當的方式來使用AngularFire2與我自己的類和對象?

我應該總是用FirebaseObjectObservable通過我的服務之間playerobject?據我所知,我無法自己創建FirebaseObjectObservable。我必須從firebase中獲取它。

回答

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。我的構造函數是'(private dbObject:FirebaseObjectObservable)'。它基本上是內部對象的包裝。 (其實我有一個專門的內部可觀察的接口)。我會說'get key(){return this.dbObject。$ key}'。有人知道我們的差異的利弊嗎?它就像Transfer vs Wrap – Clark

+0

@Clark你可以發佈你的答案,以便他們可以比較我們的實施?由於 – Karuban

+0

有'可觀察<>'的相同的功能,'FirebaseObjectObservable <>'和'FirebaseListObservable <>',不要在db tribbe一個UI更新的變化,如果我使用它? –

相關問題