我的表单包含3个复选框:“全选”,“选项1 ”和“选项2 ”。< / p>
<form id="selectionForm">
<input type="checkbox" ng-model="selectAll" >Select all
<br>
<input type="checkbox" ng-checked="selectAll" checked>Option 1
<br>
<input type="checkbox" ng-checked="selectAll">Option 2
</form>
在初始页面加载时,我只想 选项 选项1 。然后,如果选中全选复选框,则应自动检查选项1 和选项2 ,以便全部选中。
问题出在初始页面加载时,ng-checked =“selectAll”被评估,这会覆盖我最初只检查选项1的尝试(selectAll = false最初),因此没有选择任何内容。
这似乎是一个需要解决的简单问题,但我无法找到解决方案......提前感谢任何见解或建议!
答案 0 :(得分:77)
另一种方法是使用模型作为选项,在模型中设置默认选择,让控制器处理选择全部的逻辑。
angular.module("app", []).controller("ctrl", function($scope){
$scope.options = [
{value:'Option1', selected:true},
{value:'Option2', selected:false}
];
$scope.toggleAll = function() {
var toggleStatus = !$scope.isAllSelected;
angular.forEach($scope.options, function(itm){ itm.selected = toggleStatus; });
}
$scope.optionToggled = function(){
$scope.isAllSelected = $scope.options.every(function(itm){ return itm.selected; })
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"> </script>
<div ng-app="app" ng-controller="ctrl">
<form id="selectionForm">
<input type="checkbox" ng-click="toggleAll()" ng-model="isAllSelected">Select all
<br>
<div ng-repeat = "option in options">
<input type="checkbox" ng-model="option.selected" ng-change="optionToggled()">{{option.value}}
</div>
</form>
{{options}}
</div>
&#13;
答案 1 :(得分:5)
我喜欢使用ng-repeat来清楚地显示你正在选择/取消选择的内容,基本上你最终得到一个很好的小对象来基于它,并且添加它更容易。
这是 Plunker
*还要注意你如何实现allSelected?使用循环函数而不是大量的html,我确信这可以用较少的意大利面来完成,但它有效*
app.controller('MainCtrl', function($scope) {
$scope.allSelected = false;
$scope.checkboxes = [{label: 'Option 1',checked: true}, {label: 'Option 2'}}}];
$scope.cbChecked = function(){
$scope.allSelected = true;
angular.forEach($scope.checkboxes, function(v, k) {
if(!v.checked){
$scope.allSelected = false;
}
});
}
$scope.toggleAll = function() {
var bool = true;
if ($scope.allSelected) {
bool = false;
}
angular.forEach($scope.checkboxes, function(v, k) {
v.checked = !bool;
$scope.allSelected = !bool;
});
}
});
答案 2 :(得分:4)
试试这个:
<form id="selectionForm">
<input type="checkbox" ng-model="selectAll" >Select all
<br>
<input type="checkbox" ng-checked="selectAll || option1" ng-init="option1=true" ng-model="option1">Option 1
<br>
<input type="checkbox" ng-checked="selectAll">Option 2
</form>