使用AngularJS选择同一循环迭代中的所有复选框

时间:2015-04-30 14:25:18

标签: javascript angularjs checkbox

我试图实现的是在检查" master"时检查属于ng-repeat循环迭代的一些复选框。复选框。到目前为止我在视图中的代码:

<div ng-app="CheckAllModule">
    <div ng-controller="checkboxController">
        <ul ng-repeat="s in struct">
            <li><strong>{{s}} item</strong>
                <input type="checkbox" ng-checked="x1 && x2 && x3" ng-model="selectedAll" ng-click="checkAll()" />
            </li>
            <label>Subitem A
                <input type="checkbox" ng-checked="chk" ng-model="x1" />
            </label>
            <label>Subitem B
                <input type="checkbox" ng-checked="chk" ng-model="x2" />
            </label>
            <label>Subitem C
                <input type="checkbox" ng-checked="chk" ng-model="x3" />
            </label>
        </ul>
    </div>
</div>

第一个复选框是&#34; master&#34;并且应该将自己的状态强加于&#34;奴隶&#34; (接下来的三个复选框),无论他们以前的状态如何。

关于奴隶复选框,应该检查它们&amp;独立地取消选中。但如果同时检查三个,那么主人也应该。只要不检查其中一个,主人就不应该这样做。

我的控制员:

var app = angular.module("CheckAllModule", []);
app.controller("checkboxController", function ($scope) {
    $scope.struct = ['First', 'Second'];
    $scope.checkAll = function () {
        if ($scope.selectedAll) {
            $scope.chk = true;
        } else {
            $scope.chk = false;
        }
    };
});

1 个答案:

答案 0 :(得分:2)

Working Plunkr Here

作为一个注释,你应该总是尝试使用点表示法绑定到某个东西。

<ul ng-repeat="s in struct track by $index">
      <li>
        <strong>{{s.Item}} item</strong>
        <input type="checkbox" ng-click="checkAll(s.selectedAll,$index)" ng-model="s.selectedAll" ng-checked="s.x1 && s.x2 && s.x3" />
      </li>
      <label>Subitem A
        <input type="checkbox" ng-checked="s.chk" ng-model="s.x1" />
      </label>
      <label>Subitem B
        <input type="checkbox" ng-checked="s.chk" ng-model="s.x2" />
      </label>
      <label>Subitem C
        <input type="checkbox" ng-checked="s.chk" ng-model="s.x3" />
      </label>
    </ul>

你在这里的情况是你的重复绑定到一个字符串列表。您应该知道,当在每个项目上重复一个集合时,它将拥有它自己的范围并独立地维护它们的值。这很难做到,因为您无法将这些值添加到字符串中(您需要绑定到可以展开的对象)。

我已做出允许进行此特定设置的调整。它应该是令人满意的,因为已经做了微小的改变。