【问题标题】:Firebase angularfire how to update an itemFirebase angularfire如何更新项目
【发布时间】:2014-12-24 10:21:33
【问题描述】:

我找不到更新项目的方法 (您可以找到所有代码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;
});

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

我在 Frank van Puffelen 的评论之后尝试过 到

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

但它不起作用并得到我

Object { status=2, value="Invalid record; could d...ts key: [object Object]"}

您可以在以下位置查看一个可行的示例:

https://lalista.firebaseapp.com

【问题讨论】:

    标签: angularjs firebase angularfire


    【解决方案1】:

    如果你有一个显式的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 在这里可以很好地结合使用,因此您不必担心数据会不同步。

    【讨论】:

    • 再次感谢 :) 指出这一点,但这是我的错,我将普通的 firebase 与 angularfire 混为一谈,那么用 angularfire 更新的方法是什么?
    • 我尝试使用您的回复,但出现错误:Firebase.set failed: First argument contains an invalid key ($$conf)。键必须是非空字符串,并且不能包含“.”、“#”、“$”、“/”、“[”或“]”
    • 这听起来像你做了update('$$conf') 或类似的东西。可以分享一下你使用的代码 sn-p 吗?
    • 你可以看到工作示例lalista.firebaseapp.com 现在我已经设置了 items.$save(item) 但你已经得到了所有的代码。
    • 将此console.log(Items.update(item.$id,item)); 替换为Items.child(item.$id).update(item);。请使用文档:firebase.com/docs/web/api/firebase/update.html
    【解决方案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);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多