AngularFire:如何将部分更新(单个字段)应用于$ firebaseArray中的项目?

Cra*_*xIt 3 angularjs firebase angularfire

我想知道如何对项目应用部分更新$firebaseArray,文档很混乱,没有提到这一点..$save似乎破坏了整个项目:

var ref = new Firebase("https://xxxx.firebaseio.com/items");
$scope.items = $firebaseArray(ref);
someItem = getItem();
someItem.newField= 'Test';
$scope.items.$save(someItem);
Run Code Online (Sandbox Code Playgroud)

这会导致整个项目对象被完全覆盖,而不仅仅是更新 newField

我已经看过其他关于如何使用这个问题的讨论,$asObject但是我仍然很困惑如何处理这个问题$firebaseArray

Sin*_*lel 9

我想我可以在这里帮忙.首先,一些事情:

  • 我假设你getItem()不使用.$getRecord(),因此someItem没有$id财产.所以,someItemget的属性设置为属性$scope.items.
  • 您可以.$add(someItem)itemsArray,如果你想创建一个新的项目.
  • 你可以使用$scope.items.$save(someItem)if someItem有一个$id.

var ref = new Firebase(fbUrl+'/items');
itemsList = $firebaseArray(ref);
$scope.items = itemsList;

$scope.addItemObject = function() {
  var someItem = {};
  someItem.newField = 'test';
  itemsList.$add(someItem);
  console.log('$scope.items is',$scope.items);
}

$scope.updateItem = function() {
  console.log('$scope.items was',$scope.items);
  var id = prompt("Enter $id to update");
  var someItem = itemsList.$getRecord(id);
  var newField = prompt('Enter new value for newField');
  someItem.newField = newField;
  itemsList.$save(someItem).then(function(ref) {
    console.log('$scope.items is now',$scope.items);
  });;
}
Run Code Online (Sandbox Code Playgroud)

  • 请参阅此工作PLNKR示例
  • 我在PLNKR中创建了ItemsFactory,它实现了与上面代码相​​同的结果.

文档

看一眼:

希望有所帮助!