Firebase - 如何更新许多孩子而不删除AngularFire中的其他孩子

时间:2013-12-16 13:41:07

标签: angularjs firebase angularfire

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

这是console.log(angular.toJson(change,1))

的输出
{
  "10": {
    "otherRubies": 30
  },
  "11": {
    "otherRubies": 30
  }
} 

一开始我有:

enter image description here 然后我做:

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

所以我希望:

enter image description here

但不是我得到:

enter image description here

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

这是递归更新的示例:

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
  }
})