使用AngularFire 0.5.0的AngularJS - $ remove item不起作用

时间:2014-01-07 21:47:28

标签: javascript angularjs firebase angularfire

我只是想在我的第一个小角度项目上工作更多,并且我将AngularFire从0.3.0更新到0.5.0并且没有任何真正的工作了。我能够恢复数据库访问,并将项目添加到我的列表中。但删除功能不再起作用。在我使用AngularFire之前,我使用了splice(index,1)来删除一个项目。我还尝试使用0.5.0中的新$ remove,但它只删除列表中的所有项目,即使我添加了一个键。

我的名单重复:

<tr ng-repeat="(key, earning) in earnings | orderByPriority">
    <td>{{earning.date}}</td>
    <td>{{earning.description}}</td>
    <td>{{earning.price}} €</td>
    <td>
      <button class="btn btn-danger" ng-click="removeEarning(key)">
        Löschen
      </button>
    </td>

如您所见,它只是创建一个包含数据的tr,每个项目都有一个删除按钮。当我单击特定项目上的删除按钮时,只应删除此项,而不是从列表中删除所有项目。

我的JS代码现在:

function BalanceCtrl($scope, $log, $http, $firebase) {
    var dbEarnings = new Firebase('https://*******.firebaseio.com/Earnings');
    $scope.earnings = $firebase(dbEarnings);

    $scope.addEarning = function() {
        $scope.earnings.$add({date:$scope.FormEarningDate,  description:$scope.FormEarningDescription, price:$scope.FormEarningPrice});    
        $scope.FormEarningDate = '';
        $scope.FormEarningDescription = '';
        $scope.FormEarningPrice = '';
        $scope.updateEarning();}

        $scope.removeEarning = function (key) {
            $scope.earnings.$remove(key);   
        }

它无法以某种方式从列表中删除特定项目。这一切都很好用0.3.0。有人知道我能做什么吗?

1 个答案:

答案 0 :(得分:3)

orderByPriority过滤器会将集合转换为数组,从而导致key成为数字索引(0,1,2,...) - 它不再是Firebase名称。

来自http://angularfire.com/documentation.html

  

AngularFire提供orderByPriority过滤器来转换   $ firebase返回到数组的对象。数组中的对象   按优先级排序(如Firebase中所定义)。另外,每个   数组中的对象将在其上定义$ id属性,这将是   对应于该对象的键名。

所以请使用removeEarning(earning.$id)

请参阅http://plnkr.co/edit/pJf2drPwhFAVCuaBSPHq?p=preview