Firebase angularfire如何更新项目

时间:2014-10-28 20:40:56

标签: angularjs firebase angularfire

我找不到更新项目的方法 (你可以找到所有代码here) 我尝试使用此代码

app.factory('Items', function($firebase,FIREBASE_URL) {
    var ref = new Firebase(FIREBASE_URL);
    var items = $firebase(ref.child('items')).$asArray();
    var Item = {
        all: function () {
          return items;
        },
        create: function (item) {
          return items.$add(item);
        },
        get: function (itemId) {
          return $firebase(ref.child('items').child(itemId)).$asObject();
        },
        update: function (itemId, item) {
          return $firebase(ref.child('items').child(itemId)).update(item);
        },
        delete: function (item) {
          return items.$remove(item);
        }
    };
    return Item;
});

但它不起作用。 你能帮帮我吗?

我在弗兰克范普弗伦的评论后尝试过 到

update: function (item) {
    return items.$save(item);
}

但它没有工作并且让我

对象{status = 2,value ="记录无效;可以关键:[对象]"}

您可以在以下位置看到一个实用的示例:

https://lalista.firebaseapp.com

2 个答案:

答案 0 :(得分:4)

如果你有一个明确的update函数,你就不会使用Angular的/ AngularFire的双向/三向数据绑定。在这种情况下,您最好绕过AngularFire进行更新,并直接调用Firebase的JavaScript API:

 update: function (itemId, item) {
     return ref.child('items').child(itemId).set(item);
 }

请注意,我致电set而不是update,因为您似乎正在尝试替换Firebase可能为该项目存储的所有现有数据。

Firebase的JavaScript API和AngularFire在这里很好地协同工作,因此您不必担心数据不同步。

答案 1 :(得分:2)

对于使用新的AngularFire API $firebaseArray$firebaseObject来解决此问题的任何人,方法是:

$firebaseArray.$save(recordOrIndex)

var list = $firebaseArray(ref);
    list[2].foo = "bar";
list.$save(2).then(function(ref) {
  ref.key() === list[2].$id; // true
});

$firebaseObject.$save()

var obj = $firebaseObject(ref);
obj.foo = "bar";
obj.$save().then(function(ref) {
  ref.key() === obj.$id; // true
}, function(error) {
  console.log("Error:", error);
});