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&lt;&gt; 是否与FirebaseObjectObservable&lt;&gt;FirebaseListObservable&lt;&gt; 具有相同的功能,如果我使用它,是否会在 db tribbe 中更改 UI 更新?

以上是关于AngularFire2 中的类:如何处理 $key的主要内容,如果未能解决你的问题,请参考以下文章

如何处理类名中的首字母缩略词? [复制]

如何处理封装了一次性实例的类?

从重采样到数据合成:如何处理机器学习中的不平衡分类问题?

C++ 如何处理 const 标记的通过引用传递的类,这些类不是直接更改而是从另一端更改的? [复制]

如何处理在域模型中没有表示的查询?

Keras 如何处理多标签分类?