angularjs - 选中/取消选中所有复选框 - AngularJS ng-repeat

标签 angularjs checkbox angularjs-ng-repeat

我的结构如下所示:http://jsfiddle.net/deeptechtons/TKVH6/

<div>
<ul ng-controller="checkboxController">
    <li>Check All
        <input type="checkbox" ng-model="selectedAll" ng-click="checkAll()" />
    </li>
    <li ng-repeat="item in Items">
        <label>{{item.Name}}
            <input type="checkbox" ng-model="item.Selected" />
        </label>
    </li>
</ul>
</div>

angular.module("CheckAllModule", [])
.controller("checkboxController", function checkboxController($scope) {


$scope.Items = [{
    Name: "Item one"
}, {
    Name: "Item two"
}, {
    Name: "Item three"
}];
$scope.checkAll = function () {
    if ($scope.selectedAll) {
        $scope.selectedAll = true;
    } else {
        $scope.selectedAll = false;
    }
    angular.forEach($scope.Items, function (item) {
        item.Selected = $scope.selectedAll;
    });

};


});

选中或取消选中所有复选框时,将选中所有其他复选框。 But when "Check All"is selected, and I deselect one of the items, I want "Check All"to be deselected.

提前致谢!

(PS:感谢 deeptechtons 的 JSFiddle)

最佳答案

如果您使用的是 Angular 1.3+,您可以使用 ng-model-options 中的 getterSetter 来解决这个问题并避免手动跟踪 allSelected状态

HTML:

<input type="checkbox" ng-model="allSelected" ng-model-options="{getterSetter: true}"/>

JS:

var getAllSelected = function () {
    var selectedItems = $scope.Items.filter(function (item) {
        return item.Selected;
    });

    return selectedItems.length === $scope.Items.length;
}

var setAllSelected = function (value) {
    angular.forEach($scope.Items, function (item) {
        item.Selected = value;
    });
}

$scope.allSelected = function (value) {
    if (value !== undefined) {
        return setAllSelected(value);
    } else {
        return getAllSelected();
    }
}

http://jsfiddle.net/2jm6x4co/

关于angularjs - 选中/取消选中所有复选框 - AngularJS ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010373/

相关文章:

angularjs - Dart 中的手动注入(inject)

javascript - 单页应用程序 - 前端独立于后端?

标签在错误一侧的 CSS 自定义复选框

jquery - 如何增加 jqgrid 标题复选框的大小

javascript - 如何在 AngularJS 应用程序主体上动态设置溢出

javascript - 在 Twitter Bootstrap 3 中,按钮(复选框)在取消选中后保持灰色

angularjs - 如何在 `ng-repeat` 内执行 ajax 查找

javascript - 突出显示行 angularjs 中的过滤元素

javascript - ngRepeat 无法遍历嵌套数组

javascript - Angular Directive(指令)可以调用自己吗?