$firebaseObject.$save()覆盖整个节点



我有一个柱塞,我有一个简单的更新方法来更新记录。但是当我向记录添加或更新属性时,整个记录将被覆盖。

{
  "org1" : {
    "description" : "too lazy",
    "name" : "Apple",
    "website" : "http://www.apple.com"
  },
  "org2" : {
    "name" : "Google",
    "test1" : "test123",
    "website" : "http://www.google.com"
  }
}

update ()

this.update = function() {
  //var obj = new Organization('org2');
  var obj = $firebaseObject(new Firebase('https://thefactorymess.firebaseio-demo.com/organizations/org2'));
  obj.test1 = 'test123';
  obj.$save().then(function() {
    console.log('org new', obj);
  });
};

这是活塞。

谁能给我解释一下这种行为?

AngularFire $save()方法确实覆盖了该位置的当前数据。它是通过调用Firebase的JavaScript SDK的set()方法来实现的,该方法正是这样做的。

由于您在创建引用后立即调用$save(),因此数据尚未从Firebase服务器加载。所以你正在创建一个具有单个属性test1的对象。然后,当您将该对象$save()到服务器时,您最终也会得到一个具有单个属性的对象。

如果你只想更新一些属性,你可以调用update()

var ref = new Firebase('https://thefactorymess.firebaseio-demo.com/organizations/org2');
ref.update({ test1: 'test123' });

不使用AngularFire。但是,由于AngularFire是建立在常规Firebase JavaScript SDK之上的,它们之间的互操作没有问题。

或者你可以使用AngularFire的$loaded()承诺等待对象完全加载。但这将导致更多的代码和拉下数据。

我的经验法则是:

只使用AngularFire将东西绑定到$scope。对于其他内容,请使用Firebase JavaScript SDK。

相关内容

  • 没有找到相关文章

最新更新