如何更新节点内的单个对象。
{
foo:
{
title: 'hello world',
time: '1000'
}
}
如上所述,我只想要更新标题。
$firebase(new Firebase(ref).child('foo')).$save();
将更新整个节点。还试过了$save('title')
但没有工作。
我只想更新单个对象的原因,因为某些ng-model不需要更新为firebase
。
答案 0 :(得分:3)
以下是将标题设置为“无论什么”
的示例$firebase(new Firebase(ref)).$child('foo').$child('title').$set("whatever")
答案 1 :(得分:2)
我最近一直在使用angularfire和firebase。我不确定这是否是一个修复,但我不认为你在使用$ save()方法时不需要明确选择要更新的项属性。
例如,在我的用例中,我选择了一个用户,并拥有一个获得整个对象的init函数
<强> HTML 强>
<ul ng-repeat="user in vm.users>
<button ng-click="vm.updateUserInit(user)">Edit</button>
</ul>
然后使用users属性打开更新表单。在控制器中,我将该用户分配到$firebaseObject
。
<强>控制器强>
var selectedUser;
vm.updateUserInit = function (user) {
var ref = new Firebase("https://<foo>.firebaseio.com/users/" + user.$id);
selectedUser = $firebaseObject(ref);
}
它只是将用户放入firebase对象作为$ save中使用的变量selectedUser
。
然后当用户更新详细信息时
<强> HTML 强>
<button type="button" ng-click="vm.updateUserDetails()">Update User Details</button>
该函数已将所选用户作为要使用的对象,并且将更新添加的任何内容。遗漏的任何东西都不会。
<强>控制器强>
vm.updateUserDetails = function () {
selectedUser.firstName = vm.firstName;
selectedUser.$save();
}
selectedUser.$save();
仅更改名字,即使用户有6个其他属性
不确定这是否有帮助,试图绕过所有这些。如果您还没有,请查看valcon。在firebase的chrome检查器上非常好的扩展
ANGULARFIRE 2更新
如果您为通话创建服务,可以为所有更新通话提供服务
constructor(private db: AngularFireDatabase) {}
update(fbPath: string, data: any) {
return this.db.object(fbPath).update(data);
}
然后在页面组件中
this.api.update(`foo`, ({ title: 'foo Title' }) );
更简单