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);
});
另一个使用.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);
}
});
两者的优点/缺点和用例是什么?
答案 0 :(得分:5)
AngularFire的$save()
方法是使用Firebase的set()
方法实现的。两者都将数据保存到现有/已知位置。
Firebase的push()
操作对应于AngularFire的$add()
方法。两者都将生成一个新的唯一子键,这意味着您可以使用它们在保证不与任何现有数据冲突的位置添加新数据。
虽然以上是一个很难的事实,但这一点更主观。所以不要盲目地复制它,但要弄清楚它是如何适用于你的情况的。
如果您使用的数据库或中已存在一个对象(如果您正在使用具有自然键的对象),通常应使用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()' })
之类的内容。