在对象上调用angularfire的$bindTo()后,如何从Firebase中删除该对象。由于某些原因,调用$bindTo()似乎从对象中删除了$remove()函数。

例如,除非您注释掉$bindTo行,否则以下应用程序中的删除按钮将不起作用。

Codepen

JS

var app = angular.module('myApp', ['firebase']);

app.controller('myCtrl', MyCtrl);

function MyCtrl($scope, $firebaseObject) {
  var self = this;
  this.test = $firebaseObject(new Firebase('https://bindtoissue.firebaseio-demo.com/test'));

  //if you comment out this line then the delete button will work.
  this.test.$bindTo($scope, 'ctrl.test');

  this.test.$loaded(function() {
    self.test.one = 1;
    self.test.two = 2;
    self.test.three = 3;
  });
}

MyCtrl.prototype.delete = function() {
  //$remove is undefined
  this.test.$remove();
}


的HTML

<div ng-app="myApp" ng-controller="myCtrl as ctrl">
    <button ng-click="ctrl.delete()">delete</button>
    <pre>{{ctrl.test | json}}</pre>
</div>

最佳答案

请注意,$ bindTo()不会将同步对象放到作用域上,而只是放到数据上。在这种情况下,您已将同步的$ firebaseObject放在this.test上,然后还将数据绑定到this.test

请注意,在此示例中,没有理由使用$ bindTo()。您可以在不创建三向绑定的情况下调用$ remove(),这仅在不想手动调用$ save()时才对对象进行本地更改很有用。

另外,$ loaded的用法在这里是不正确的。使用$ bindTo()时,您将要使用它返回的承诺。

this.test.$bindTo($scope, 'ctrl.test')
  .then(function() {
    self.test.one = 1;
    self.test.two = 2;
    self.test.three = 3;
  });

10-06 04:52