我的ng-repeat
内置了函数ng-click
:
<div ng-repeat="item in data.education_list">
<a href="" ng-click="deleteEducation(item)">Delete</a>
</div>
我将对象item
从ng-repeat
传递给函数deleteEducation
,以便从data.education_list
删除元素。
所以看起来功能:
$scope.deleteEducation = function (item){
$scope.data.education_list.splice($scope.data.education_list.indexOf(item), 1);
}
所以这种方式有时不正确。当我在ng-repeat
中有一些元素并且在删除item
之后,我的模板HTML被更新并删除了另一个项目的行,而不是我删除的。
什么是正确的删除方法?
data.education_list
是对象数组,如果{{data.education_list}}
:
[{"name":"Test1","time":"01 Hun 2004 - 12 Sun 2006","Idusereducation":"86","usereducationIdToUser":"702","type":"1"}]
问题二: 如果我有对象的对象而不是带键的数组:
{"1" : {obj}, 2 : "obj"}
如果我尝试按键从对象中删除元素:
删除OBJ[1];
我遇到了同样的问题。
答案 0 :(得分:3)
最简单的方法是使用$index
,这是角度添加到轨道数组的唯一标识符。
<div ng-repeat="item in data.education_list">
<a href="" ng-click="data.education_list.slice($index,1)">Delete</a>
</div>
您需要搜索索引。然后做拼接。它有点重,但如果您要过滤列表则需要。
<强> JS 强>
this.removeItem = function(item) {
var index = $scope.data.education_list.indexOf(item);
if (index != -1) {
$scope.data.education_list.splice(index, 1);
}
};
<强> HTML 强>
ng-click="myctrl.removeItem(item)"
Working Example click to delete and .indexOf vs $index comparison
答案 1 :(得分:2)
<div ng-repeat="item in data.education_list track by $index">
<a href="" ng-click="deleteEducation($index)">Delete</a>
</div>
然后
$scope.deleteEducation = function (position){
$scope.data.education_list.splice(position, 1);
}
答案 2 :(得分:0)
遇到了类似的问题。在我的情况下,我必须解决如下,如果它有助于某人。
如果您正在处理对象,请注意indexOf适用于数组,不适用于该数组中的Object。您可以执行以下操作来识别索引并处理此案例;
$scope.removeReport = function(report) {
var index = $scope.contact.reports.map(function(r) { return r.id;}).indexOf(report.id);
if (index >= 0) {
$scope.contact.reports.splice(index, 1);
}
}
答案 3 :(得分:0)
要从对象的二维数组中移除子项,需要先定义父项,然后再定义子项拼接
例如
myObject[this.parentIndex].children.splice(this.childIndex,1);
myObject 是一个包含包含子项的数组的对象
parentIndex 是父项的索引
childIndex 是父项下子项的索引。
您可以找出自己的方法来循环访问父数组和子数组并决定要删除哪些子项。