在angularjs中选择checkall时触发所有复选框事件

时间:2016-03-10 10:54:07

标签: angularjs rest checkbox

<table class="table">
<thead>
            <th> <input type='checkbox' name='selectall' ng-model="value1" ng-click="selectAll()"></th>
            <th>  Name </th>
        </thead>
        <tr ng-repeat="x in items">
            <td><input type='checkbox' ng-model="value2" ng-true-value="YES" ng-false-value="NO" ng-click="select($event,x.id)"
                            /></td>
            <td>{{x.name}}</td>
            </tr>
        </tr>
    </table>

点击&#34; selectall()&#34;如何获取所有item.id复选框?

另外,您能否为ng-repeat复选框建议适当的ng-model语法?

谢谢, Raja K

3 个答案:

答案 0 :(得分:1)

看看这个例子,你可以看到复选框值的变化,

使用复选框时使用ng-change而不是ng-click

// the main (app) module
var myApp = angular.module("myApp", []);

// add a controller
myApp.controller("myCtrl", function($scope) {
  
  $scope.value1 = "NO";
  $scope.items = [{
    id: 1,
    check: "NO",
    name: "A"
  }, {
    id: 2,
    check: "NO",
    name: "B"
  }, {
    id: 3,
    check: "NO",
    name: "C"
  }, {
    id: 4,
    check: "NO",
    name: "D"
  }, {
    id: 5,
    check: "NO",
    name: "E"
  }, {
    id: 6,
    check: "NO",
    name: "F"
  }, {
    id: 7,
    check: "NO",
    name: "G"
  }, {
    id: 8,
    check: "NO",
    name: "H"
  }];
  $scope.selectAll = function() {
    angular.forEach($scope.items, function(elem) {
      elem.check = $scope.value1;
    })
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="myApp" ng-controller="myCtrl">
  <table class="table">
    <thead>
      <th>
        <input type='checkbox' name='selectall' ng-true-value="YES" ng-false-value="NO" ng-model="value1" ng-change="selectAll()">{{value1}}
      </th>
      <th>Name</th>
    </thead>
    <tbody>
      <tr ng-repeat="x in items">
        <td>
          <input type='checkbox' ng-model="x.check" ng-true-value="YES" ng-false-value="NO" ng-change="select($event,x.id)" /> {{x.check}}
        </td>
        <td>{{x.name}}</td>
      </tr>
    </tbody>
  </table>
</body>

答案 1 :(得分:0)

<强>尊敬的

这里只是一个帮助参考。你的问题。我给出了选择所有记录的方案因此根据您的需要进行修改。

<button ng-click="selectAll()">select all</button>
<div ng-repeat="item in items">
  <label>
    {{item.n}}:
    <input type="checkbox" ng-model="selected[item.id]">
  </label>
</div>

在控制器中,只需将所有项目设置为所选项:

$scope.selected = {};
$scope.selectAll = function(){
  for (var i = 0; i < $scope.items.length; i++) {
    var item = $scope.items[i];

    $scope.selected[item.id] = true;
  }
};

谢谢&amp;干杯

答案 2 :(得分:0)

var myapp = angular.module('app', []);
myapp.controller('Ctrl', function ($scope) {
  var vm = this;
    vm.data = {
      items: [
         {id:1,name:"ali",selected: "NO"},
         {id:2,name:"reza",selected: "NO"},
         {id:3,name:"amir",selected: "NO"}
      ]
     };
  
  vm.value1 = false;
  
  vm.selectAll = function($event){
     var checkbox = $event.target;
     var selected = "NO";
         if(checkbox.checked)
           {
           selected = "YES";
           }
    else {
      selected = "NO";
      }
    angular.forEach(vm.data.items, function(item) {
             item.selected = selected;
             });
    
         
         
   
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="Ctrl as vm">
<table class="table">
<thead>
            <th> <input type='checkbox' name='selectall' ng-model="value1" ng-click="vm.selectAll($event)"></th>
            <th>  All </th>
        </thead>
        <tr ng-repeat="x in vm.data.items">
            <td><input type='checkbox' ng-model="vm.data.items[$index].selected" ng-true-value="YES" ng-false-value="NO" ng-click="vm.select($event,x.id)"
                            /></td>
            <td>{{x.name}}</td>
            
        </tr>
    </table>

</div>