确定集合并删除Angular中的一个特定项

时间:2017-11-09 22:38:34

标签: javascript angularjs

从这个例子开始:

<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(根据定义是唯一标识符)的对象。

1 个答案:

答案 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;
        }
    }
};