У меня есть несколько флажков, которые проверяются. Тем не менее, я хочу, чтобы, если все остальные флажки сняты, кроме одного, и вы попытаетесь снять отметку с последнего флажка, появится ошибка, и этот флажок не будет снят. Это была моя попытка:
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
массив не обновляется, флажок будет проверяться, но это не так. Есть ли способ, который я могу сохранить, чтобы последний флажок не отмечен, чтобы оставаться включенным? Благодарю!
Вы пытались использовать ng-change вместо ng-click?
https://docs.angularjs.org/api/ng/directive/ngChange
Если вы посмотрите снова, вам может потребоваться заменить (i) в методе сплайсинга, чтобы использовать $ scope.checkboxItem, являющийся указателем в массиве.
Не уверен, что он используется в другом месте, но отражается на текущем фрагменте кода, $ scope.checkboxItem может быть просто переменной области видимости функции?