【问题标题】:Classes in AngularFire2: how to handle $keyAngularFire2 中的类:如何处理 $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。我必须从火力基地得到它。

【问题讨论】:

    标签: angular typescript firebase angularfire2


    【解决方案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 更新?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    相关资源
    最近更新 更多