The $save()
Angularfire 0.8 中的内容让我感到困惑。
这是一个最小的示例 - 我的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();
}
}])
When addNode()
调用了,果然在我的firebase中创建了一个节点:
但当addAttribute()
被调用时,整个记录被替换,而不是我所期望的,这是为了添加“lastname”属性。
毫无疑问我误解了文档。有人可以帮忙吗?
Update:
好的,我需要等到对象加载完毕。修改后现在可以用了addAttribute
to:
$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();
});
}
正如您自己已经发现的那样:
- a
FirebaseObject
(由返回$asObject()
) 没有$update
method.
- 你打电话时
$save()
on a FirebaseObject
在完全加载之前,您可能最终会删除其他属性
要修补现有数据,您可以:
- 要么等待整个对象加载(就像您在更新问题时所做的那样)
- Or call
$firebase.$update
直接地
$firebase(FB).$update({ lastname: "Bond" });
最后一种方法的优点是您不必拉取整个对象,而只需更新单个属性。请注意,这可能是过早优化 http://c2.com/cgi/wiki?PrematureOptimization在大多数情况下,但仍然...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)