简体   繁体   English

如何在AngularJS中使用过滤器从数组中删除项目?

[英]How to remove item from array with filter in AngularJS?

When I click on tr without any filter, my function array.splice() works. 当我点击没有任何过滤器的tr ,我的函数array.splice()工作。 Indexes in the array are in the correct order, so the array.splice() works. 数组中的索引的顺序正确,因此array.splice()可以正常工作。

When the filter is enable, Indexes in the array are not updated and still in the same order. 启用过滤器后,阵列中的索引不会更新,但仍以相同的顺序排列。 So array.splice() removes the wrong item. 所以array.splice()删除了错误的项目。

    <span ng-click="orderP0 = 'statut_name'; reversePO=!reversePO">order</span>

    <tr ng-repeat="project in projects | orderBy : orderPO : reverse track by $index" ng-click="remove($event,$index,projects)">
        <span class="label" ng-bind="project.statut_name"></span>
    </tr>

    $scope.remove = function($event,index,array){
        array.splice(index,1);
    };

How to update index in the array ? 如何更新数组中的索引? Or How to removes the right item ? 或者如何删除正确的项目?

It's easier to splice you projects in the actual position of the element in the array using indexOf. 使用indexOf将项目拼接在数组中元素的实际位置更容易。

$scope.remove = function(project){
    $scope.projects.splice($scope.projects.indexOf(project),1);
}

This way you need to pass to the remove function only the current project. 这样您只需要将当前项目传递给remove函数。

<tr ng-repeat="project in projects | orderBy : orderPO : reverse track by $index" ng-click="remove(project)">
    <span class="label" ng-bind="project.statut_name"></span>
</tr>

The simplest solution would be to change your remove function to take in the project instead of the index. 最简单的解决方案是更改删除函数以接受项目而不是索引。

$scope.remove = function(project){
    for(var i = $scope.projects.length - 1; i >= 0; i--){
        if($scope.projects[i].statut_name == project.statut_name){
            $scope.projects.splice(i,1);
        }
    }
}

Example Plunker: http://plnkr.co/edit/51SNVMQjG3dsmpYI5RyY?p=preview 示例Plunker: http ://plnkr.co/edit/51SNVMQjG3dsmpYI5RyY?p = preview

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM