【问题标题】:Selecting multiple checkboxes in Angular on button click单击按钮时在Angular中选择多个复选框
【发布时间】:2017-05-30 17:17:52
【问题描述】:

我的 HTML 代码中有一个表格,其中的行由 AngularJS ng-repeat 生成。每行在第一列中包含一个复选框和其他数据 在相应的列中。当单击另一个 div 中存在的此按钮时,我试图将所有复选框标记为已选中。

<tbody>
  <tr ng-repeat="row in myObject track by $index" ng-class-even="'alternate-row'">
    <td name="checkbox">
      <input type="checkbox" ng-model="row.checked" ng-style="row.checkboxStyle" ng-click="setSelectedRow(row)" />
    </td>
    <td>{{ row.data1 }}</td>
    <td>{{ row.data2 }}</td>
  </tr>
</tbody>

按钮如下:

<div class="btn-group">
	<button type="button" id="selectAll" class="btn btn-default" title="Select All" ng-click="selectAllGrid()">Select All</button>
</div>

在单击复选框时调用一个方法,该复选框将该特定行添加到数组中。如果我在单击按钮时将复选框标记为选中,将如何调用该方法。

【问题讨论】:

    标签: javascript html angularjs angularjs-ng-repeat


    【解决方案1】:

    使用指令ng-checked

    <tbody>
      <tr ng-repeat="row in myObject track by $index" ng-class-even="'alternate-row'">
        <td name="checkbox">
          <input type="checkbox" ng-checked="checkAll" ng-model="row.checked" ng-style="row.checkboxStyle" ng-click="setSelectedRow(row)" />
        </td>
        <td>{{ row.data1 }}</td>
        <td>{{ row.data2 }}</td>
      </tr>
    </tbody>
    

    在你的按钮功能中

    selectAllGrid(){
     $scope.checkAll=true;
    }
    

    【讨论】:

    • 成功了。谢了哥们。但是当我单击复选框时执行的操作没有发生。同样,在我手动单击复选框后,按钮停止工作并且不再选择。
    【解决方案2】:

    你可以这样做:

    <table>
        <tbody>
          <tr ng-repeat="row in myObject track by $index" ng-class-even="'alternate-row'">
            <td name="checkbox">
              <input type="checkbox" ng-model="row.checked" ng-style="row.checkboxStyle" />{{row.checked}}
            </td>
            <td>{{ row.data }}</td>
          </tr>
        </tbody>
      </table>
    
    
      <div class="btn-group">
        <button type="button" id="selectAll" class="btn btn-default" title="Select All" ng-click="selectAllGrid()">Select All</button>
      </div>
    

    在你的控制器中:

    app.controller('MainCtrl', function($scope) {
      $scope.allchecked  = false;
    
      $scope.selectAllGrid = function(){
        console.log($scope.allchecked);
        $scope.allchecked = !$scope.allchecked
       for(var i =0; i<$scope.myObject.length; i++) {
         $scope.myObject[i].checked = $scope.allchecked ;
       }
      }
    
      $scope.myObject = [
          {"data": "sdfsdf"},
          {"data": "asdfassafs"},
          {"data": "asesfrsaedfsadfsadsd"}
        ]
    });
    

    打工仔here

    【讨论】:

    • 谢谢。这是一个很好的答案。但是如何调用当我物理地将复选框标记为选中时调用的函数/事件。
    • 不明白。能不能详细解释一下。
    • 当我手动单击复选框以选中/取消选中它时,会触发一个事件,并在 JS 中为该事件调用一个方法。我用存在该复选框的那一行的值填充一个数组。现在,当我使用按钮选中/取消选中它时,不会在复选框选中/取消选中时触发该方法。
    • 好的。我更新了plunker。一旦看到。如果我错过了什么,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多