如何处理angularfire5

时间:2018-03-02 10:07:25

标签: angular firebase key angularfire2 angularfire5

众所周知,版本5中对angularFire api进行了重大更改。例如,在我的数据服务中,我之前有过这样的方法:

getBookings(): Observable<Booking[]> {
    return this.db.list('bookings');
}

update(booking: Booking): void {
    this.db.object('bookings/' + this.getFireBaseKey(booking)).update(booking);
}

private getFireBaseKey(b: Booking): string {
    return (<any>b).$key;
}

现在,在升级到angularFire5后,我遇到了以下问题:因为我希望所有与firebase相关的东西都封装在我的服务中,而不是泄漏到应用程序的其余部分,我想从服务中公开rxjs Observables。因此,我必须在valueChanges()中添加对getBookings()的调用 - 但随后我将$key(我稍后需要更新)中的内容放宽,或者放到snapshotChanges()我将其映射如下:

getBookings(): Observable<Booking[]> {
    return this.db.list<Booking>('bookings')
        .snapshotChanges()
        .map(changes =>
            changes.map(c => ({ key: c.payload.key, ...c.payload.val() }))
        );
}

后者(有点)要求我通过关键属性扩展我的预订模型,并且我可以相应地调整我的getKey方法。

但现在尴尬的部分来了:更新预订将导致Firebase数据库中出现奇怪的数据结构,其中密钥作为“list-key”出现,并作为“list-object”的关键属性。

推荐的方式是什么?我看到两个选项,对我来说都不是很令人满意:

  • 在更新
  • 之前从Booking实例中删除该属性
  • 不添加预订模式?然后我们有一个无类型的属性,并且“魔法”泄漏到服务之外的应用程序。

0 个答案:

没有答案