一尘不染

AngularJS订购后错误的$ index

angularjs

我是Angular.js的新手,在排序数组和处理排序后的数据时遇到一些问题。

我有一个包含项目的列表,并希望按“
Store.storeName”对其进行排序,到目前为止,该列表仍然有效。但是在对数据排序之后,我的删除功能不再起作用。我认为那是因为排序后$
index错误,因此删除了错误的数据。

我该如何解决?在范围内而不是在视图中排序数据?怎么做?

这是一些相关的代码:

在视图中:

<tr ng-repeat="item in items | orderBy:'Store.storeName'">
                <td><input class="toggle" type="checkbox" ng-model="item.Completed"></td>
                <td>{{item.Name}}</td>
                <td>{{item.Quantity}} Stk.</td>
                <td>{{item.Price || 0 | number:2}} €</td>                
                <td>{{item.Quantity*item.Price|| 0 | number:2}} €</td>
                <td>{{item.Store.storeName}}</td> 
                <td><a><img src="img/delete.png" ng-click="removeItem($index)">{{$index}}</a></td>
            </tr>

在我的控制器中,我具有此删除功能,该功能应删除特定数据:

$scope.removeItem = function(index){
        $scope.items.splice(index,1);
    }

在视图中订购之前,这种方法效果很好。如果缺少重要的东西,请让我现在。

谢谢!


阅读 158

收藏
2020-07-04

共1个答案

一尘不染

取而代之或中继$index-如您所注意到的-将指向已排序/过滤后的数组中的索引,您可以将该项本身传递给removeItem函数:

<a><img src="img/delete.png" ng-click="removeItem(item)">{{$index}}</a>

removeItem使用indexOf数组方法修改该函数以找到索引,如下所示:

$scope.removeItem = function(item){
   $scope.items.splice($scope.items.indexOf(item),1);
}
2020-07-04