Angular:如何通过链接取消选中所有复选框?

时间:2014-07-24 21:10:47

标签: html angularjs select

这是我的小提琴:http://jsfiddle.net/VSph2/280/

我正在尝试取消选中checkbox并使用链接重置范围变量的值,但是,它似乎不起作用。有人可以帮忙吗?

使用Javascript:

var app = angular.module('myApp', []);

app.controller('IndexCtrl', ['$scope', function($scope) {

  $scope.colors = [
    {id: 1, name: "Blue"},
    {id: 2, name: "Green"},
    {id: 3, name: "Red"}
  ];
  $scope.color_ids = [];

  $scope.clearAll = function() {
    angular.forEach($scope.color_ids, function(color_id) {
      color_id.checked = false; //nothing works!!
      color_id.selected = false; //
    });
    $scope.color_ids = [];
    $scope.color_ids.selected = false; //doesn't work either
  };

}]);

HTML:

<div ng-controller="IndexCtrl">{{1+1}}
<h2>Products</h2>
  <div class="filters col-two">
    <a ng-click="clearAll()">Clear all filters</a>
    <h3>Color</h3>
    <div ng-repeat="color in colors">
      {{ color.name }} <input type="checkbox" ng-model="color_ids">
    </div>
  </div>
</div>

3 个答案:

答案 0 :(得分:6)

您永远不会向color_id数组添加任何内容,因此foreach不会迭代任何内容。

我更新了您的代码,只使用主色数组并在其上添加selected属性:

http://jsfiddle.net/VSph2/283/

HTML:

{{ color.name }} <input type="checkbox" ng-model="color.selected">

的javascript:

angular.forEach($scope.colors, function(color_id) {        
    color_id.selected = false;
});

答案 1 :(得分:5)

我在寻找类似的东西时遇到过这种情况,我的解决方案是重置color_ids对象

$scope.clearAll = function() {    
    $scope.color_ids = [];
};

您还需要对输入进行以下更改

<input type="checkbox" ng-model="color_ids[color.id]" ng-checked="color_ids[color.id]">

jsfiddle at https://jsfiddle.net/novelnova/VSph2/756/

答案 2 :(得分:3)

您误解了ng-modelcheckbox的内容。它只会切换特定的值集。因此,在您的示例中,您可能希望将其更改为:

{{ color.name }} <input type="checkbox" ng-model="color.selected">

然后你的颜色会有一个名为selected的额外属性,无论是真还是假,取决于是否选中该框。

要清除,您将遍历所有颜色并将其选定状态设置为false。

$scope.clearAll = function() {
    angular.forEach($scope.colors, function(color) {
        color.selected = false;
    });

更新了小提琴:http://jsfiddle.net/VSph2/285/