Angularfire 0.8中的$save()
令我感到困惑。
这是一个最小的例子 - 来自我的controllers.js文件的片段:
.controller('LandingPageController', ['$scope','$firebase', function($scope,$firebase) {
$scope.addNode = function() {
var FB = new Firebase('https://protodb.firebaseio.com/testrecords/');
var fbr = $firebase(FB);
fbr.$set(1,{firstname: 'James'});
}
$scope.addAttribute = function() {
var FB = new Firebase('https://protodb.firebaseio.com/testrecords/1');
var fbr = $firebase(FB).$asObject();
fbr.lastname = "Bond";
fbr.$save();
}
}])
当调用addNode()
时,确实在我的firebase中创建了一个节点:
但是当调用addAttribute()
时,整个记录被替换,而不是我所期望的,这是为了添加'lastname'属性。
我毫无疑问误解了这些文档。有人可以帮忙吗?
更新
好的,我需要等到对象加载完毕。将addAttribute
更改为:
$scope.addAttribute = function() {
var FB = new Firebase('https://protodb.firebaseio.com/testrecords/1');
var fbr = $firebase(FB).$asObject();
fbr.$loaded().then(function() {
fbr.lastname = "Bond";
fbr.$save();
});
}
答案 0 :(得分:4)
你已经发现了自己:
FirebaseObject
(由$asObject()
返回)没有$update
方法。$save()
之前致电FirebaseObject
时,您最终可能会删除其他属性要修补现有数据,您可以:
$firebase.$update
$firebase(FB).$update({ lastname: "Bond" });
最后一种方法的优点是,您不必下拉整个对象,只更新单个属性。请注意,在大多数情况下,这可能是premature optimization,但仍然......