【问题标题】:How to update a record with known $key in angularFire2?如何在 angularFire2 中使用已知的 $key 更新记录?
【发布时间】:2017-10-02 09:44:03
【问题描述】:

我的 firebase dB 中有一条记录要更新。因为我将播放器对象绑定到我不想在提交更新之前刷新的 UI 组件,所以我制作了真实 firebase 记录的克隆副本,如下所示:

newPlayerWithSameKey(p: Player): any {
    const origKey = (<any>p).$key;
    const duplicate = JSON.parse(JSON.stringify(p))
    duplicate.$key = (<any>p).$key;
    return duplicate;
}

如果我在控制台中记录,pduplicate 完全一样。 然后将副本注入到我处理记录的数据服务上的更新方法中。我正在尝试以这种方式更新它:

updatePlayer(player: Player): void {
    const key = this.getKey(player);

    // The following three lines are just for the console log to demonstrate
    let shouldBeThePlayerToBeUpdated;
    this.db.object('/players/' + key).subscribe(p => shouldBeThePlayerToBeUpdated = p);
    window.console.log('Mock player: ', key, JSON.stringify(shouldBeThePlayerToBeUpdated));

    window.console.log('Updating player with key: ', key, JSON.stringify(player));
    this.db.list('/players').update(key, player)
}

private getKey(p: Player): string {
    return (<any>p).$key
}

但我收到以下错误:您可以看到键完全匹配,并且 firstName 属性正在正确更新(这就是我在表单中所做的)。我真的很困惑这里的问题是什么......有人有想法吗?

【问题讨论】:

  • 试试this.db.object('/players/'+key).update(...)

标签: angular firebase firebase-realtime-database angularfire2


【解决方案1】:

你可以替换:

this.db.list('/players').update(key, player)

通过

this.db.object('/players/'+key).update(player)

编辑:

this.db.object('/players').update({'/'+key, player})

一个例子:我如何使用它:

const update = {
    'starsNumber': someValue + 1
}
update[`level/${photo_id}/photo_id`] = photo_id
}

firebase
    .database()
    .ref(`game/users/${admin_id}/players/${user.id}/`)
    .update(update)

【讨论】:

  • 不幸的是,我收到完全相同的错误消息,它不起作用。
  • @Wandrille 但在this.db.list('/players').update({'/'+key, player})list('/players') 将获得所有玩家,然后update({'/'+key, player}) 获得正确的单个文件。如果我错了,请纠正我?
  • @N.HariHaraSudhan 我你担心工作量,不要。 list('/players') 获取对玩家列表的引用(更好的是:指向可观察的玩家发射列表),并没有真正获取所有这些。
  • @EluciusFTW 非常清楚,所以一旦我们订阅,那么它只会获取所有记录对吗?
  • @N.HariHaraSudhan 从技术上讲,一旦我们订阅了 db 发送给我们,我们就不会获取它们。
猜你喜欢
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 2017-07-12
  • 2022-07-10
  • 2018-11-29
相关资源
最近更新 更多