AngularFire2中的类:如何处理$ key

时间:2017-02-22 12:14:57

标签: angular typescript firebase angularfire2

目前正在开发我的第一个AngularFire2应用。 我有一些与firebase中的结构匹配的Typescript类。

我的火力架结构

-players
 |-playerkey
   |-name

我的班级是

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

如果我想在我的播放器对象中使用playerkey,我不能只将public key:string添加到构造函数中,因为这会阻止我将任何玩家对象推送到firebase。

有没有正确的方法将AngularFire2与我自己的类和对象一起使用?

我是否应该始终使用FirebaseObjectObservable在服务之间传递我的播放器对象?据我所知,我不能自己创建一个FirebaseObjectObservable。我必须从火堆中获取它。

1 个答案:

答案 0 :(得分:3)

你可以这样做:

<强> player.ts

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();
}