AngularFire2 中的类:如何处理 $key
Posted
技术标签:
【中文标题】AngularFire2 中的类:如何处理 $key【英文标题】:Classes in AngularFire2: how to handle $key 【发布时间】:2017-07-12 11:37:42 【问题描述】:目前正在开发我的第一个 AngularFire2 应用程序。 我有与我在 firebase 中的结构相匹配的 Typescript 类。
我的火力基地结构
-players
|-playerkey
|-name
我的班级是
export class Player
constructor(public name: string)
如果我想要我的播放器对象中的 playerkey,我不能只将 public key:string 添加到构造函数,因为这会阻止我将任何播放器对象推送到 firebase。
是否有任何适当的方法可以将 AngularFire2 与我自己的类和对象一起使用?
我是否应该始终使用 FirebaseObjectObservable 在服务之间传递我的 playerobject?据我所知,我自己无法创建 FirebaseObjectObservable。我必须从火力基地得到它。
【问题讨论】:
【参考方案1】:你可以这样做:
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();
【讨论】:
你的 Player 构造函数?这是我们唯一不同的地方。我正在存储发出的FirebaseObjectObservable
。我的构造函数是(private dbObject: FirebaseObjectObservable)
。它基本上是围绕该内部对象的包装器。 (实际上我有一个用于内部可观察的专用接口)。我会说get key() return this.dbObject.$key
。有谁知道我们方差的优缺点?这就像 Transfer vs Wrap
@Clark 你能发布你的答案,以便他们比较我们的实现吗?谢谢
Observable<>
是否与FirebaseObjectObservable<>
和FirebaseListObservable<>
具有相同的功能,如果我使用它,是否会在 db tribbe 中更改 UI 更新?以上是关于AngularFire2 中的类:如何处理 $key的主要内容,如果未能解决你的问题,请参考以下文章