AngularJS 的全选、反选实现


AngularJS 的全选、反选实现

一、需求

  • 要使用 AngularJS 实现 checkbox 的全选、反选。
  • 其中所有项都选中,则全选的 checkbox 也选中。
  • 有一项没有选中,全选的 checkbox 不选中。
  • 点击反选按钮,所有项反选,全选的checkbox 视情况而定,如果再所有项都没有选中的情况下反选等同于全选。

二、思路

  1. 需要获取全选 checkobx 的选中状态。
  2. 需要获取每个项 checkbox 的状态。
  3. 需要获取所有选中的 checkbox 的ng-model。
  4. 需要获取所有选项的数量。(用于和 3 进行比较,来判断是否全部选中)
  5. 需要获取反选按钮的状态,然后所有选中的 checkbox 的 ng-model 置反。

三、实现

  1. index.html

    <!DOCTYPE html>
    <html>
     <head>
         <meta charset="utf-8" />
         <title>全选与反选Demo</title>
         <script src="js/angular.min.js"></script>
         <script src="js/index.js"></script>
     </head>
     <body ng-app="demo" ng-controller="indexController" >
         <ul>
             <li><input type="checkbox" ng-model="sellect_all" ng-click="selectAll($event, list)">全选 <input type="button" ng-model="invert_all" ng-click="invertAll($event, list)" value="反选"></li>
             <li ng-repeat="entity in list">
                 <input type="checkbox" ng-model="select_one[entity.id]" ng-click="selectOne($event,entity.id, list)">{{entity.value}}
             </li>
         </ul>
     </body>
    </html>
  2. index.js

    var app = angular.module('demo',[]);
    
    app.controller("indexController",function($scope){
     // 自定义数据列表
     $scope.list = [{"id": "1","value": "a"},{"id": "2","value": "b"},
                     {"id": "3","value": "c"},{"id": "4","value": "d"},
                     {"id": "5","value": "e"}];
    
     $scope.selectIds=[];// 选中的ID集合 
     $scope.select_one=[]; // 单项是否选中状态集合,以 [{"1":true}...] 的方式存在,实际开发中,id 可能不是数字
     $scope.sellect_all = false; // 全选按钮是否选中
     $scope.invert_all = false; // 反选按钮是否选中
    
     // 全选功能
     $scope.selectAll = function($event, list) {
         // 因为绑定的 sellect_all 有滞后,所以让其等于 $event.target.checked
         $scope.sellect_all = $event.target.checked;
    
         if ($scope.sellect_all) {
             angular.forEach(list, function(value) {
                 $scope.selectIds.push(value.id);
                 $scope.select_one[value.id] = true;
             })
         } else {
             // 实现全不选功能
             $scope.selectIds=[];
             $scope.select_one=[];
         }
     }
    
     // 反选功能
     $scope.invertAll = function($event, list) {
         $scope.invert_all = $event.target.checked;
         // 实现反选功能
         $scope.selectIds=[];
         angular.forEach(list, function(value) {
             $scope.select_one[value.id] = !$scope.select_one[value.id];
             if ($scope.select_one[value.id]) {
                 $scope.selectIds.push(value.id);
             }
         })
         checkAll();
     }
    
     // 单项checkbox选择功能
     $scope.selectOne = function($event, id, list) {     
         if($event.target.checked){//如果是被选中,则增加到数组
             $scope.selectIds.push( id);         
         }else{
             var idx = $scope.selectIds.indexOf(id);
               $scope.selectIds.splice(idx, 1);//删除 
         }
         checkAll();
     }
    
     // 检查是否全选
     checkAll = function() {
         // 如果按钮已全部被选,就使全选按钮选中,之所以进行非0判断,是考虑到了在实际环境中数据是服务器响应的。
         if ($scope.selectIds.length != 0 && $scope.list.length == $scope.selectIds.length) {
             $scope.sellect_all = true;
         } else {
             // 如果有的按钮没有被选中,就取消全选
              $scope.sellect_all = false;
         }
     } 
    });
  3. 实现效果
    1638942-20190830113312682-99589491.png

    1638942-20190830113225887-2031315311.png

    1638942-20190830113329335-984046726.png

转载于:https://www.cnblogs.com/jtznenic/p/11434124.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值