Angularjs 角度材质复选框-将功能添加到ng选中

Angularjs 角度材质复选框-将功能添加到ng选中,angularjs,checkbox,angular-material,angularjs-ng-change,Angularjs,Checkbox,Angular Material,Angularjs Ng Change,我正在使用Angular Material提供的和“不确定”属性来根据选中的复选框更新数组。但是,阵列仅根据ng click而不是ng change进行更新。因此,选中“全选”项不会将值插入数组 想想这个 如何根据ng更改更新addData功能 ng change确实需要ng model,但实际上本例只需要一个模型 你有3个数组基本上保存着相同的项目,你只需要一个就可以了 在每个项目上添加选定的属性,并将其用作模型 使用筛选选定的项上的数组 控制器: controller('AppCtrl'

我正在使用Angular Material提供的
“不确定”属性来根据选中的复选框更新数组。但是,阵列仅根据ng click而不是ng change进行更新。因此,选中“全选”项不会将值插入数组

想想这个

如何根据ng更改更新
addData功能

  • ng change
    确实需要
    ng model
    ,但实际上本例只需要一个模型
  • 你有3个数组基本上保存着相同的项目,你只需要一个就可以了
  • 在每个项目上添加
    选定的
    属性,并将其用作模型
  • 使用筛选选定的
    项上的数组
控制器:

controller('AppCtrl', function($scope, $filter) {
  $scope.items = [{num: 1},{num: 2}, {num: 3}, {num: 4},{num: 5}];

  $scope.isIndeterminate = function() {
    var selected = $filter('filter')($scope.items, {selected: true}).length;
    console.log(selected);
    return selected !== 0 && selected !== $scope.items.length;
  };

  $scope.allChecked = function() {
   return $filter('filter')($scope.items, {selected: true}).length === $scope.items.length;  
  };

  $scope.toggleAll = function() {
    var selected = $filter('filter')($scope.items, {selected: true}).length;
    var newSelected = selected < $scope.items.length;
    angular.forEach($scope.items, function(item) {
      item.selected = newSelected;   
    });
  };
});
控制器('AppCtrl',函数($scope,$filter){
$scope.items=[{num:1},{num:2},{num:3},{num:4},{num:5}];
$scope.isIndeterminate=函数(){
var selected=$filter('filter')($scope.items,{selected:true});
console.log(选中);
返回所选!==0&&selected!=$scope.items.length;
};
$scope.allChecked=函数(){
返回$filter('filter')($scope.items,{selected:true});
};
$scope.toggleAll=function(){
var selected=$filter('filter')($scope.items,{selected:true});
var newSelected=所选<$scope.items.length;
angular.forEach($scope.items,function(item){
item.selected=newSelected;
});
};
});
标记:

  <div>
    <fieldset class="demo-fieldset">
      <legend class="demo-legend">Using
        <md-checkbox> with the 'indeterminate' attribute </legend>
      <div layout="row" layout-wrap="" flex="">
        <div flex-xs="" flex="50">
          <md-checkbox aria-label="Select All" md-indeterminate="isIndeterminate()" ng-click="toggleAll()" ng-checked="allChecked()">
            <span ng-if="isChecked()">Un-</span>Select All
          </md-checkbox>
        </div>
        <div class="demo-select-all-checkboxes" flex="100" ng-repeat="item in items">
          <md-checkbox ng-model="item.selected">
            {{ item.num }}
          </md-checkbox>
        </div>
      </div>
    </fieldset>
    <div ng-repeat="data in items | filter: {selected: true}" style="display: inline-block">
       {{data.num}},
    </div>
  </div>

使用
具有“不确定”属性
取消全选
{{item.num}
{{data.num}},
改编代码笔:


按评论编辑:

谢谢,这是对所问问题的正确答案。然而,今天,客户改变了他们的要求,希望根据一个复选框选择几个项目。考虑他们想要的是,当你选择“蔬菜”时,下面的列表将显示“胡萝卜、黄瓜、土豆”等。可以用同样的方法吗?