目前正在开发我的第一个AngularFire2应用。 我有一些与firebase中的结构匹配的Typescript类。
我的火力架结构
-players
|-playerkey
|-name
我的班级是
export class Player {
constructor(public name: string) {}
}
如果我想在我的播放器对象中使用playerkey,我不能只将public key:string添加到构造函数中,因为这会阻止我将任何玩家对象推送到firebase。
有没有正确的方法将AngularFire2与我自己的类和对象一起使用?
我是否应该始终使用FirebaseObjectObservable在服务之间传递我的播放器对象?据我所知,我不能自己创建一个FirebaseObjectObservable。我必须从火堆中获取它。
答案 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();
}