AngularFire更新单个对象

时间:2014-01-25 20:10:28

标签: firebase angularfire

如何更新节点内的单个对象。

{ 
 foo: 
  {
   title: 'hello world', 
   time: '1000'
  } 
}

如上所述,我只想要更新标题。 $firebase(new Firebase(ref).child('foo')).$save();将更新整个节点。还试过了$save('title')但没有工作。

我只想更新单个对象的原因,因为某些ng-model不需要更新为firebase

2 个答案:

答案 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' }) );

更简单