我有以下问题:
我创建了一个允许用户从列表中删除项目的列表,如下所示:
当用户点击垃圾桶图标时,该项目会被正常删除。 问题是当用户在顶部使用过滤器时。
在这种情况下,如果我删除了数字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);
});
}
这是我的html模板:
<td><a href="" ><i class="icon-trash" ng-click="deleteOwn($index)"></i></a></td>
我也尝试使用代码:$scope.ownsCoupons.splice(coupon, 1);
但没有成功。
有谁知道如何解决这个问题?
我使用以下参考编码:AngularJS How to remove an Item from scope
[编辑]
我为此创建了一个Plunker:http://plnkr.co/edit/Fhxp6uZyTJCY05CAQ7yA?p=preview
答案 0 :(得分:24)
如@ pkozlowski.opensource所述,您不能依赖$index
以这种方式识别数组中的项目。我会做出以下更改:
HTML:
<td><a ng-click="deleteWish(coupon)"><i class="icon-trash"></i></a></td>
JS:
$scope.deleteWish = function (coupon) {
var index = $scope.coupons.indexOf(coupon);
if (index != -1) {
$scope.coupons.splice(index, 1);
}
}
这是一个有效的Plunker:http://plnkr.co/edit/b0b2cYGsM5wtw8hIrQB5?p=preview