角度复选框"全选"功能,最初只选择一个框

Cum*_*bus 27 html checkbox angularjs angularjs-ng-model

我有一个包含3个复选框的表单:" "," 选项1 "和" 选项2 ".

<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>
Run Code Online (Sandbox Code Playgroud)

在初始页面加载我想 选择1进行检查.然后,如果选中全选复选框,它应自动检查选项1选项2,以便选择所有选项.

问题是在初始页面加载时,ng-checked ="selectAll"被评估,这会覆盖我最初只检查选项1的尝试(selectAll = false最初),因此没有选择任何内容.

这似乎是一个简单的问题需要解决,但我无法找到解决方案......提前感谢任何见解或建议!

PSL*_*PSL 80

另一种方法是使用模型作为选项,在模型中设置默认选择,让控制器处理选择全部的逻辑.

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; })
  }
});
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是一种更好的方法. (3认同)

Jos*_*sep 5

尝试这个:

<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>
Run Code Online (Sandbox Code Playgroud)


小智 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;
      });
   }
});
Run Code Online (Sandbox Code Playgroud)