选中,取消选中数组中的复选框项angularjs javascript

选中,取消选中数组中的复选框项angularjs javascript,javascript,angularjs,checkbox,Javascript,Angularjs,Checkbox,我在UI上显示了一个名为namesData的数组。 默认情况下,应选中复选框。当复选框未选中时,该项应从namesData中删除。 如果选中该复选框,则应将其添加回namesData $scope.namesData = [{"name":"abc.txt"}, {"name":"xyz.txt"}] html: 问题:上述逻辑的问题是,选中/未选中的项被添加/删除到namesData数组的末尾,而不是其实际索引项。 请建议如何解决此问题。如果您只需要提交选中的项目,请使用与下面类似的逻辑。您

我在UI上显示了一个名为namesData的数组。 默认情况下,应选中复选框。当复选框未选中时,该项应从namesData中删除。 如果选中该复选框,则应将其添加回namesData

$scope.namesData = [{"name":"abc.txt"}, {"name":"xyz.txt"}]
html:

问题:上述逻辑的问题是,选中/未选中的项被添加/删除到namesData数组的末尾,而不是其实际索引项。
请建议如何解决此问题。

如果您只需要提交选中的项目,请使用与下面类似的逻辑。您可以从数组中筛选选中的项并使用它们。如果确实需要修改原始数组,则必须保留原始数组的副本,并通过检查原始数组将选中项插入其位置

angular.module(“myApp”,[]).controller(“myCtrl”,函数($scope){
$scope.namesData=[{
名称:“abc.txt”,
核对:正确
}, {
名称:“xyz.txt”,
核对:正确
}];
$scope.nameItem={
核对:正确
};
$scope.submit=函数(){
$scope.selectedList=$scope.namesData.filter(函数(namesDataItem){
返回namesDataItem.checked;
});
console.log($scope.selectedList);
};
});

{{namesList.name}
提交
{{selected.name}

要删除的代码看起来很好。Add可能有问题。您确定remove也会删除最后一个元素而不是索引中指定的元素吗?如果我选中/取消选中abc.txt,则逻辑是在namesData中再次推/删除abc.txt,而不是使用数组中已有的abc.txt。谢谢cubbuk。如果我们想使用不同的数组来存储选中的值,这个解决方案就可以工作。
<div ng-repeat="namesList in namesData">
        <input type="checkbox" ng-model="nameItem[$index].checked" ng-change="nameChange(namesList, nameItem[$index].checked, 'nameObj'+ $index, $index)" ng-checked="nameItem.checked" name="nameObj" id="{{'nameObj'+$index}}"/>&nbsp;
        <span>{{namesList.name}}</span>
$scope.namesData = [{"name":"abc.txt"}, {"name":"xyz.txt"}];
$scope.nameItem.checked = true;

$scope.nameChange = function(list, isChecked, id, itemNum){
    if (isChecked){
        $scope.namesData.push(list);
    }
    else
        $scope.namesData.splice($scope.newNamesList.indexOf(list), 1);
};