【问题标题】:Firebase - How to update many children and not delete others in AngularFireFirebase - 如何在 AngularFire 中更新许多孩子而不删除其他孩子
【发布时间】:2013-12-16 13:41:07
【问题描述】:

我想在 firebase ref 上使用 update() 来在一次操作中更新多个子节点。 为此,我传递了带有要更改的值的对象。

这里是console.log(angular.toJson(change,1))的输出

{
  "10": {
    "otherRubies": 30
  },
  "11": {
    "otherRubies": 30
  }
} 

一开始我有:

然后我做:

var refUsers = new Firebase(FBURL).child('users/');
refUsers.update(change);

所以我想拥有:

但我得到的是:

有什么办法吗?

【问题讨论】:

  • 你尝试更新操作了吗
  • 是的,对不起,我粘贴了错误的版本...不可以,但仍然不起作用
  • 我不确定您的示例中如何使用 angular 或 angularFire?
  • 我认为解决方法是将旧值包含在新值中

标签: angularjs firebase angularfire


【解决方案1】:

更新不是递归操作。所以它在子路径上调用 set 。如果您在 users/ 处调用 update,则表示不要删除 user/ 下不在我的数据中的任何键,当您想说时,不要删除 user/ 子记录中的任何键。

相反,迭代记录并在每个记录上调用更新:

var refUsers = new Firebase(FBURL).child('users/');
for(key in change) { 
   if( change.hasOwnProperty(key) ) {
      refUsers.child(key).update( change[key] );
   }
}

【讨论】:

  • 不,这必须在一个操作中完成。目前交易将是理想的选择。
【解决方案2】:

使用 Firebase 3,您可以通过以下方式进行更新:

update = {};
update['10/otherRubies'] = 30;
update['11/otherRubies'] = 30;
refUsers.update(change);

这种更新数据的方法不在文档中,但它对我有用。

【讨论】:

    【解决方案3】:

    这是递归更新的示例:

    function updateRecursively(path, value) {
      for (let key in value) {
        if (value[key] instanceof Object) {
          updateRecursively(`${path}/${key}`, value[key]);
        } else {
          firebase.database().ref(`${path}/${key}`).set(value[key]);
        }
      }
    }
    

    用法:

    updateRecursively('users', {
      "10": {
        "otherRubies": 30
      },
      "11": {
        "otherRubies": 30
      }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 2018-03-21
      • 2021-07-21
      • 2018-11-24
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多