AngularJS 实现将所有输入检查为可重用指令的最佳方式

AngularJS best way to implement check all inputs as reusable Directive

我正在寻找为多行输入实现 "check-all" 输入的最佳方法。

在这种情况下,由于有多种类型的列表视图,每一种都有自己的指令和控制器。

我正在考虑将全选控件实现为属性指令,在父指令的模板中,类似于:

<input check-all="'nameOfParentDirective'">

想法是将父指令的名称作为自定义属性的值传递,因此 Check All Directive 的这个实例知道要使用哪个父范围,从而检查或取消选中所有行在各自的 table.

这是我被挂断的地方,我不确定如何动态设置要求值。静态设置它很容易:

require: '^parentDirective',

但这在这里行不通。

也许我把事情复杂化了,我猜有更简单的方法可以做到这一点。

最终结果是在父指令的输入中冒泡 check/uncheck 更改事件,因此可以相应地选中或取消选中它的所有复选框...

干杯!

我建议采用另一种方法。与其尝试进行某种 DOM 操作挑战,不如更新一个模型,该模型存储有关所选内容的信息并使用该信息来驱动视图。只要项目集合有一些共享的 属性,比如 "selected",那么对象具有的其他属性并不重要,因此这可以应用于任意数量的列表。很快就会在此处包含示例。

angular.module('TestApp', [])

.factory('UtilFactory', function(){
  var utilFact = {};
  
  utilFact.selectAll = function(array){
    for(var i=0; i<array.length; i++){
      array[i].selected = true;
    }
  }
  
  return utilFact;
})
.controller('SomeCtrl', function($scope, UtilFactory){
  var randData = [];
  for(var i=0; i<100; i++){
    randData.push({
      id:i,
      data:Math.random()
    });
  }
  
  $scope.someData = randData;
  
  $scope.UtilFactory = UtilFactory;

})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>

<div ng-app="TestApp" ng-controller="SomeCtrl">
    <button ng-click="UtilFactory.selectAll(someData)">Select All</button>
  <div ng-repeat="item in someData">
    <label>
      <input type="checkbox" ng-model="item.selected"/>
      {{item.data}}
    </label>
  </div>
</div>