使用 Angular JS 选择所有复选框

Posted

技术标签:

【中文标题】使用 Angular JS 选择所有复选框【英文标题】:select all checkboxes with angular JS 【发布时间】:2016-07-03 18:01:23 【问题描述】:

我正在尝试用一个复选框选择所有复选框。但是该怎么做呢?

这是我的 html

    <input type="checkbox" ng-model="selectAll" ng-click="checkAll()" />

<!-- userlist --> 
    <!--<div id="scrollArea" ng-controller="ScrollController">-->
    <table class="table">
      <tr>
          <th>User ID</th>
          <th>User Name</th>
          <th>Select</th>    
     </tr>
     <tr ng-repeat="user in users | filter:search">
        <td>user.id</td>
        <td>user.name</td>
        <td><input type="checkbox" ng-click="usersetting(user)" ng-model="user.select"></td>
        <td><tt>user.select</tt><br/></td>
     </tr>
    </table>

我创建了一个额外的复选框来选择和取消选择所有复选框。

JS:

.controller('UsersCtrl', function($scope, $http)
    $http.get('users.json').then(function(usersResponse) 
      $scope.users = usersResponse.data;
    );

      $scope.checkAll = function () 
            angular.forEach($scope.users, function (user) 
                user.select = true;
                );
            ;  
 );

我也试过了,但它们都不适合我:(

  $scope.checkAll = function () 
        angular.forEach($scope.users, function (user) 
            user.select = $scope.selectAll;
        );
    ;  

【问题讨论】:

或许能帮到你***.com/questions/35914431/… usersetting(user) 函数被调用时是否发生了什么?也许当您检查所有复选框时,该函数中的某些内容会拒绝请求和/或取消选中该框? 这个问题就像一个副本的副本。@hadiJZ 的链接应该可以满足您的目的。 【参考方案1】:

尝试在选中顶部复选框时针对每个要选中的用户设置复选框:

<input type="checkbox" ng-model="selectAll"/>    

<table class="table">
  <tr>
      <th>User ID</th>
      <th>User Name</th>
      <th>Select</th>    
 </tr>
 <tr ng-repeat="user in users | filter:search">
    <td>user.id</td>
    <td>user.name</td>
    <td><input type="checkbox" ng-click="usersetting(user)" ng-model="user.select" ng-checked="selectAll"></td>
    <td><tt>user.select</tt><br/></td>
 </tr>
</table>

【讨论】:

【参考方案2】:

简单使用如下代码

HTML

<input type="checkbox" ng-model="checkboxes.checked" data-ng-click="checkAll()" class="select-all" value="" />

JS

  $scope.checkAll = function() 
                angular.forEach($scope.users, function(item) 
                $scope.checkboxes.items[item._id] =      $scope.checkboxes.checked;
                $scope.selection.push(item._id);
            );
               

【讨论】:

【参考方案3】:

您错过了带有ng-controllerng-appangular.module 的容器div。

user.select = $scope.selectAll 是正确的变体。

https://jsfiddle.net/0vb4gapj/1/

【讨论】:

都不适合我:/但是谢谢! :) 也许还有其他问题:/ 我已经在 pasteBin... app.js 和 HTML pastebin.com/7eJu14nd pastebin.com/tq10Gtjb 中创建了我的代码 我刚刚删除了 apiomat 的脚本 @Paili 1. OnLoad 引用了一个不存在的函数。 2.你的js代码必须在html中after angular.js(比如app.js)。工作代码:pastebin.com/rMgmiRgW【参考方案4】:

这是一个JSFiddle,你可以使用ng-checked,上面有一个变量,比如user.checked(或者你可以使用user.select

<div ng-app="app" ng-controller="dummy">
  <table>
    <tr ng-repeat="user in users">
      <td>user.id</td>
      <td>user.name</td>
      <td>
        <input type="checkbox" ng-click="usersetting(user)" ng-checked="user.checked" ng-model="user.select">
      </td>
      <td><tt>user.select</tt>
        <br/>
      </td>
    </tr>
  </table>
  <button ng-click="checkAll()">Check all</button>
</div>

JS:

var app = angular.module("app", []);
app.controller('dummy', function($scope) 
  $scope.users = [
    id: 1,
    name: "Hello",
    select: 1
  , 
    id: 2,
    name: "World",
    select: 1
  , ];
  $scope.checkAll = function() 
    angular.forEach($scope.users, function(user) 
      user.checked = 1;
    );
  
);

【讨论】:

以上是关于使用 Angular JS 选择所有复选框的主要内容,如果未能解决你的问题,请参考以下文章

带有选择、复选框和单选按钮的 Angular JS 表单

如何在Angular 2中选择ngFor中的所有过滤复选框?

选择所有淘汰赛 JS 复选框

使用 Angular 只需单击一次复选框即可启用所有复选框

Angular JS & Semantic-UI 复选框需要双击

Angular-tree-component 如何通过复选框选择捕获选定的节点