我检查了许多复选框。但是,我想要它,以便如果除了一个之外的所有其他复选框都未选中,并且您尝试取消选中上次选中的复选框,则会出现错误,并且不会取消选中该复选框。这是我的尝试:
Checkbox.html:
<input id ="selectDatasource" class="checkboxPosition" type="checkbox" ng-checked="datasourcesSelected.indexOf(datasource.name) > -1 && datasourcesSelected.length > 1" ng-click="toggleSelection(datasource)">
Checkbox.js:
$scope.datasourcesSelected = ['a', 'b', 'c']
//Listen for checked datasources
$scope.toggleSelection = function(datasource){
if($scope.datasourcesSelected.length === 1){
alert('Error!')
//Make sure that checkbox is not unchecked.
return;
}
$scope.checkboxItem = $scope.datasourcesSelected.indexOf(datasource.name);
//Currently selected within selected
if($scope.checkboxItem > -1){
$scope.datasourcesSelected.splice(i, 1);
}
else{
$scope.datasourcesSelected.push(datasource.name);
}
}
现在我有警报显示但是当我点击它时,最后一个选中的复选框变为未选中状态。我认为,因为我的datasourcesSelected
数组未更新,所以复选框将保持选中状态,但事实并非如此。有没有什么办法可以让我最后一个未经检查的复选框继续检查?谢谢!
答案 0 :(得分:0)
您是否尝试过使用ng-change而不是ng-click?
https://docs.angularjs.org/api/ng/directive/ngChange
再看一下,你可能需要在splice方法中替换(i)使用$ scope.checkboxItem作为数组中的索引选择器。
不确定它是否在其他地方使用但反映当前的代码片段,$ scope.checkboxItem可能只是一个普通的函数范围变量?