angular 实现全选、反选、个别选择的实现

一、要点:

[html] view plain copy
 
  1. <input type="checkbox" ng-checked="m" ng-model="n">  

如上所示是一个复选框,它有两个angular 指令 ,ng-checked 和 ng-model  值分别是m和n 。

1、设置m的初值为true,则复选框初始状态选中,m为false则复选框初始状态未被选中,且这两种情况是和n初值的值无关的

2、我们单击复选框,改变它的选中状态时,n的值为随之实时改变(angular双向数据绑定特性),选中为true,未选中为false,但是m的值是时钟不变的一直是初始值!

3、总结:

(1)ng-checked的值只是用来决定初始状态时选中还是为选中,ng-model  才是随着复选框是否被选中,来实时改变它绑定变量的值。

(2)如果初始状态ng-checked和ng-model指令同时存在,则复选框的初始状态是否被选中有ng-checked的值来决定,与ng-model无关。

(3)当只有ng-model指令存在时,则复选框初始状态(是否被选中)由ng-model的值来决定,且它绑定的变量的值为随复选框是否被选中而变化(选中为true,未选中为false)

(4)当只有ng-checked指令存在时,则复选框初始状态(是否被选中)由ng-checked的值来决定,但是它绑定的变量的值是不会随复选框选中状态的改变而改变的,是固定值。

(5)当ng-checked和ng-model指令同时存在时,上面说了,初始是否选中,有ng-checked决定,但是当我们改变ng-model的值时,选中状态会随着ng-model的值而改变。

二、实现:全选、反选、个别选择问题:

废话不多说,先上代码:

html:

[html] view plain copy
 
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>实现全选复选框问题</title>  
  6.     <script src="jquery-1.9.1.js"></script>  
  7.     <script src="angular.min.js"></script>  
  8. </head>  
  9. <body ng-app="myApp">  
  10.     <div ng-controller="mainCtrl">  
  11.         <label>全选<input type="checkbox" ng-model="selectAll" ng-click="all(selectAll)"></label><br/>  
  12.         <div ng-repeat="person in persons">  
  13.             <label>{{person.name}}:<input type="checkbox" ng-checked="selectAll" ng-model="person.state"</label><br/>  
  14.         </div>  
  15.   
  16.         <div>selectAll : {{selectAll}}</div>  
  17.         <div ng-repeat="person in persons">  
  18.             {{person.name}} : {{person.state}}  
  19.         </div>  
  20.     </div>  
  21. <script src="checkbox.js"></script>  
  22. </body>  
  23. </html>  

js:

[javascript] view plain copy
 
  1. angular.module("myApp",[])  
  2. .controller("mainCtrl", function ($scope) {  
  3.     $scope.selectAll=true;  
  4.     $scope.all= function (m) {  
  5.         for(var i=0;i<$scope.persons.length;i++){  
  6.           if(m===true){  
  7.               $scope.persons[i].state=true;  
  8.           }else {  
  9.               $scope.persons[i].state=false;  
  10.           }  
  11.         }  
  12.     };  
  13.     $scope.persons=[  
  14.         {name:"a",state:true},  
  15.         {name:"b",state:true},  
  16.         {name:"c",state:true},  
  17.         {name:"d",state:true}  
  18.     ]  
  19. });  


运行程序,初始状态:

处于全部选中的状态,我现在单击全选按钮,则变成全部未选中:

接下来,我单击a和c选中,效果如下:

接下来我单击全选则会全部选中,效果如下:

接下来,我单击a和b选项,让这两项处于未选中,状态,效果如下:

好了,不再演示了,在实际应用时,根据a、b、c、d的选择状态(true or false )来进行某些操作,就达到目的了。下面说下代码:

1、如html文件所示,全选复选框的ng-model指令绑定了 selectAll变量,a、b、c、d的ng-checked指令绑定的值也是selectAll,但是它的ng-model指令绑定的值是各自的状态属性state,初始selectAll的值为true,所以,初始状态时,全部复选框均处于选中状态。

2、给selecAll复选框的ng-click指令绑定了一个函数all,此函数根据selectAll的值来设置a、b、c、d的状态是否被选中

3、对于a、b、c、d复选框,当单击它们改变选中状态时,由于ng-model绑定的它们各自的状态变量,所以它们会改变自己的选中状态值,但是ng-checked绑定的变量(selectAll)的值不会受到影响,那就不会影响到其他的复选框的选择状态了。

原文地址:https://www.cnblogs.com/yourName/p/8795340.html