从这个例子开始:
<div ng-repeat="item in collectionA track by item.instanceid">
<input id="{{item.instanceid}}" style="display:none">
<input ng-model="item.name" type="text">
<button onclick="Remove({{item.instanceid}})">Remove</button>
</div>
<div ng-repeat="item in collectionB track by item.instanceid">
<input value="{{item.instanceid}}" style="display:none">
<input ng-model="item.name" type="text">
<button onclick="Remove({{item.instanceid}})">Remove</button>
</div>
<script>
function Remove(instanceid){
var container = $('#'+instanceid).closest('div');
var scopeItem = angular.element(container).scope();
....
}
</script>
这是我的用例的简化,但我需要继续使用这种代码结构。所以,从这一点开始,我想知道在Remove
函数中是否可以从collectionA或collectionB中删除只知道其instanceid
(根据定义是唯一标识符)的对象。
答案 0 :(得分:1)
为什么不使用角度的全部力量而不是混合角度与香草JS的做事方式?
具体而言,我指的是使用ng-click
代替onclick
:
<button ng-click="Remove($index, 'collectionA')">Remove</button>
然后在你的控制器中:
$scope.Remove = function(index, collection) {
$scope[collection].splice(index, 1);
};
使用ng-repeat中的$index
,无需根据instanceid搜索数组。
编辑:OP声称他需要一种方法来使用intanceid
删除数组项目,我将继续展示如何虽然我不确定他如何确定哪个集合到搜索:
$scope.Remove = function(instanceid) {
for (var i = 0, len = $scope.collection.length; i < len; i++) {
if ($scope.collection[i].instanceid === instanceid) {
$scope.collection.splice(i, 1);
return;
}
}
};