angularjs input checkbox复选框组的实现

如果实现方式是创建功能,请参考:https://mp.csdn.net/postedit/100515989

第二种实现方式(如修改功能),代码如下:

// html页面代码

<body ng-app="app">
    <div>
        <input type="checkbox" name="checkbox" ng-model="all" ng-click="updateAll(all)" ng-checked="all">全选
        <div>
            <span ng-repeat="row in list">
                <input type="checkbox" name="{{row.name}}" value="{{value.id}}" ng-click="updateSelected($event,row.id)" ng-checked="row.check" ng-model="row.check">
                <label for="{{row.id}}">{{row.name}}</label>
            </span>
        </div>
    </div>
    
</body>

// 控制器逻辑处理
var control = app.module('textController', function($scope){
    // 后端返回数据用$scope.list接收存储所有要展示复选框数据。
    // $scope.selectedList接收存储选中的复选框,且数据为选中的数据id。

    // 如果$scope.list数组中,对象里面有一个属性为boolean值,用来判断复选框是否选中,则直接将ng-checked="布尔值",下面的情况就可以不看了。

    // 如果$scope.list数组中,对象里面没有一个属性为boolean值,则可以通过逻辑处理添加一个boolean值用来判断哪个是选中的
    
    // 下面的代码,我们只讨论在返回数据中没有boolean值的情况
    let temp = data;//用一个变量来接受返回值,待处理完再赋值给$scope.list
    $scope.selected = [];// 用来保存选中的数据
    $scope.unSelected = [];// 用来保存未选中的数据
    for(var i = 0; i < temp.length; i++) {
        let ok = false;
        $scope.selectedList.forEach( row => {
            // 为选中的id添加check属性是true
            if(row.id == temp[i].id) {
                temp[i].check = true;
                $scope.selected.push(temp[i])
            }
        })
        if(!ok) {
            // 为没有选中的id添加check属性为false
            temp[i].check = false;
            $scope.unSelected.push(temp[i])
        }
    }
    
    // 将选中的和未选中的全部放进一个list里面
    $scope.list = [...$scope.selected,...$scope.unSelected];

    if($scope.selected.length==$scope.list.length) {
         $scope.all = true; // 全选为true
    }else {
          $scope.all = false; // 全选为false
    }


     // 点击选中事件
    $scope.updateAll = function(val) {
        if(!val) {
            $scope.selected = [];
            $scope.list.forEach( row => {
                row.check = true;
                $scope.selected.push(row.id);                
            })
        }else {
            $scope.selected = [];

            $scope.list.forEach( row => {
                row.check = false;
            })
        }
    }

    // 复选框选中事件
    $scope.updateSelected = function($event,id) {
        let checkbox = $event.target;
        let action = (checkbox.checked ? 'add' : 'delete');
        if(action == 'add' && $scope.selected.indexOf(id) == -1) {
            $scope.selected.push(id);
            $scope.list.forEach( row => {
                if(row.id == id) {
                    row.check = true;
                }
            })
        }
        if(action == 'delete'&&$scope.selected.indexOf(id) != -1) {
            let idx = $scope.selected.indexOf(id);
            $scope.list.forEach( row => {
                if(row.id == id) {
                    row.check = false;
                }
            })
        }

        if($scope.selected.length == $scope.list.length) {
            $scope.all = true;
        }else {
            $scope.all = false;
        }
    }
    
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值