Firebase push()vs Angularfire $ save()

Ada*_*ers 4 javascript angularjs firebase angularfire

angularfire.$ save()与firebase .push()相比如何?我知道push()将在存储数据时生成唯一键,但我无法使用angularfire重新创建行为.有没有办法或者我应该使用.push()如果是这样,在什么情况下你会使用$ save()?

这是我使用$ save()的一个示例...

        var fb = new Firebase(FIREBASE_URI).child('Test');
        var article = $firebaseObject(fb);

        article.Foo = "bar";
        article.$save().then(function(fb) {
            console.log(fb.key() === article.$id); // true
        }, function(error) {
            console.log("Error:", error);
        });
Run Code Online (Sandbox Code Playgroud)

另一个使用.push()......

        var article = new Firebase(FIREBASE_URI).child('Articles');

        article.push({
            title:   $scope.article.title,
            post:    $scope.article.post
        }, function(error) {
            if (error) {
                console.log("Error:", error);
            }
        });
Run Code Online (Sandbox Code Playgroud)

两者的优点/缺点和用例是什么?

Fra*_*len 5

push/$ add和set/$ save如何相关

AngularFire的$save()方法是使用Firebase的set()方法实现的.两者都将数据保存到现有/已知位置.

Firebase的push()操作对应于AngularFire的$add()方法.两者都将生成一个新的唯一子键,这意味着您可以使用它们在保证不与任何现有数据冲突的位置添加新数据.

何时使用push和何时使用set

虽然以上是一个很难的事实,但这一点更具主观性.所以不要盲目地复制它,但要弄清楚它是如何适用于你的情况的.

通常,如果您拥有数据库中已存在的对象,或者您正在使用具有自然键的对象,则应使用set()/ .$save()

如果项目没有自然键或者您希望按"按时间顺序"排序,则通常会使用push()/ $add()为您生成密钥.这将确保项目存储在唯一键下,并且较新的项目将在稍后的列表中显示.

因此,如果您正在与用户合作,那么您通常会uid使用类似的东西存储ref.child('users').child(user.uid).set(user).另一方面,如果您要将聊天消息添加到聊天室,您将使用类似的内容ref.child('chat').push({ name: 'Adam Youngers', 'Firebase push() vs Angularfire $save()' }).