AngularJs 中的CheckBox前后台交互

前台页面:

 1  <div class="form-group">
 2             <label for="CompanyName" class="col-sm-3 control-label">产品相斥:</label>
 3             <div class="col-sm-9">
 4                 <span ng-repeat="proRadio in proRadios">
 5                     <input id="{{proRadio.ProductID}}" type="checkbox" name="{{proRadio.ProductName}}" value="{{proRadio.ProductID}}" 
ng-click
="updateSelection($event,proRadio.ProductID)" ng-checked="isSelected(proRadio.ProductID)" /> 6 7 <label for="{{proRadio.ProductID}}">{{proRadio.ProductName}}</label> 8 </span> 9 10 </div> 11 </div>

解释:这里的checkBox是动态加载的,proRadios在控制器中通过$scope.proRadios=……进行赋值,这里关键的两个方法ng-click与ng-checked

ng-click:调用方法将复选框的选中的集合进行更新操作,以便传入后台。

ng-checked:调用的方法返回true或false来决定复选框的选中状态。

控制器(Controller)中:

 //复选框设置
    var IDs = product.ProductMutex.split('|');
    //初始化数据将数据库里查询出来的数据存放到集合 $scope.selected中
    $scope.selected = [];
    for (var i in IDs) {
        if (IDs != "")
        {
            $scope.selected.push(IDs[i]);
        }
    }

    var updateSelected = function (action, id, name) {
        id = "" + id + "";
        if (action == 'add' && $scope.selected.indexOf(id) == -1) {
            $scope.selected.push(id);
        }
        if (action == 'remove' && $scope.selected.indexOf(id) != -1) {
            var idx = $scope.selected.indexOf(id);
            $scope.selected.splice(idx, 1);
        }
        //alert($scope.selected);
    }
    //判断是在集合$scope.selected里去掉此id,还是加上id
    $scope.updateSelection = function ($event, id) {
        var checkbox = $event.target;
        var action = (checkbox.checked ? 'add' : 'remove');
        updateSelected(action, id, checkbox.name);
    }
    //设置复选框的选中状态
    $scope.isSelected = function (id) {
        id = "" + id + "";//因为$scope.isSelected中的数据是字符串,所以将数字装换成字符串
        return $scope.selected.indexOf(id) >= 0;
    }

最后的操作数据都存放到$scope.selected中了,在存入数据库就OK了。

 

注:仅个人笔记及总结,有误的地方请各位指正!

posted @ 2016-07-26 18:39  绽放的菖蒲  阅读(3960)  评论(0编辑  收藏  举报