过滤后从列表中删除项目

Dei*_*zan 12 angularjs angularjs-ng-repeat

我有以下问题:

我创建了一个允许用户从列表中删除项目的列表,如下所示:

在此输入图像描述

当用户单击垃圾桶图标时,该项目将被正常删除.问题是当用户在顶部使用过滤器时.

在此输入图像描述

在这种情况下,如果我删除数字6565(原始列表中的索引4,筛选列表中的1),删除的项目在原始列表上的索引1上,导致删除编号为#564456的寄存器

这是我点击的删除电话:

 $scope.deleteOwn = function (uuid) {
    console.log(uuid);
    var coupon = $scope.ownsCoupons[uuid];
    Coupon.delete({'id' : coupon.uuid}, function () {
        $scope.ownsCoupons.splice(uuid, 1);
    });
}
Run Code Online (Sandbox Code Playgroud)

这是我的html模板:

<td><a href="" ><i class="icon-trash" ng-click="deleteOwn($index)"></i></a></td>
Run Code Online (Sandbox Code Playgroud)

我也尝试使用代码:$scope.ownsCoupons.splice(coupon, 1);没有成功.

有谁知道如何解决这个问题?

我使用以下引用编写了代码:AngularJS如何从作用域中删除Item

[编辑]

我为此创建了一个Plunker:http://plnkr.co/edit/Fhxp6uZyTJCY05CAQ7yA?p = preview

Mic*_*ley 24

正如@ pkozlowski.opensource所提到的,您不能依赖于$index以这种方式识别数组中的项.我会做出以下更改:

HTML:

<td><a ng-click="deleteWish(coupon)"><i class="icon-trash"></i></a></td>
Run Code Online (Sandbox Code Playgroud)

JS:

$scope.deleteWish = function (coupon) {
    var index = $scope.coupons.indexOf(coupon);
    if (index != -1) {
        $scope.coupons.splice(index, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个有效的Plunker:http://plnkr.co/edit/b0b2cYGsM5wtw8hIrQB5?p =preview

  • @LoveAndHappiness`array.indexOf(item)`如果在`array`中找不到`item`,则返回`-1`.如果`index!= -1`,则找到该项,并可以将其删除. (2认同)