javascript - AngularJS - 将 ng-repeat 分成不同的过滤器或组

标签 javascript angularjs angularjs-ng-repeat

我有一个列表,我想将其分组到页面上的不同部分。

我目前是这样划分的(代码被缩短以便于阅读):

<div ng-repeat="role in roles | filter: { Type: 'AA'}">
   <input class="styled" type="checkbox" value="{{ role.Value }}" />
   <label>{{ role.Name }}</label>
</div>
<div ng-repeat="role in roles | filter: { Type: 'BB'}">
   <input class="styled" type="checkbox" value="{{ role.Value }}" />
   <label>{{ role.Name }}</label>
</div>
<div ng-repeat="role in roles | filter: { Type: 'CC'}">
   <input class="styled" type="checkbox" value="{{ role.Value }}" />
   <label>{{ role.Name }}</label>
</div>
<div ng-repeat="role in roles | filter: { Type: 'DD'}">
   <input class="styled" type="checkbox" value="{{ role.Value }}" />
   <label>{{ role.Name }}</label>
</div>
<div ng-repeat="role in roles | filter: { Type: 'EE'}">
   <input class="styled" type="checkbox" value="{{ role.Value }}" />
   <label>{{ role.Name }}</label>
</div>
...

我认为这会循环遍历每个组的列表,这似乎效率不高。

我很好奇是否有更好的方法来做到这一点?例如,在顶部只有一个 ng-repeat 并在子部分中进行过滤。

最佳答案

如果我理解正确的话,这应该可以解决问题。

angular.module("roleApp", [])
  .controller('myCtrl', myCtrl);

function myCtrl($scope) {
  $scope.people = [{
    name: 'Penelope',
    role: 'AA'
  }, {
    name: 'Franklin',
    role: 'BB'
  }, {
    name: 'Stewart',
    role: 'CC'
  }, {
    name: 'Keith',
    role: 'DD'
  }, {
    name: 'Paula',
    role: 'EE'
  }, {
    name: 'Maria',
    role: 'BB'
  }, {
    name: 'Claudette',
    role: 'EE'
  }];


  var indexedRoles = [];

  $scope.rolesToFilter = function() {
    indexedRoles = [];
    return $scope.people;
  };

  $scope.filterRoles = function(person) {
    var roleIsNew = indexedRoles.indexOf(person.role) == -1;
    if (roleIsNew) {
      indexedRoles.push(person.role);
    }
    return roleIsNew;
  }
}
h1 {
  font-size: 16px;
  font-weight: bold;
  padding: 0;
}
h2 {
  font-size: 14px;
  font-weight: bold;
  margin: 0;
  padding: 0;
}
p {
  font-size: 12px;
  margin-left: 1em;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div ng-app="roleApp" ng-controller="myCtrl">
  <h1>ROLES:</h1>
  <div ng-repeat="personPerRole in rolesToFilter() | filter:filterRoles">
    <h2>{{personPerRole.role}} :</h2>
    <p ng-repeat="person in people | filter:{role: personPerRole.role}">{{person.name}}</p>
  </div>
</div>

关于javascript - AngularJS - 将 ng-repeat 分成不同的过滤器或组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372259/

相关文章:

javascript - JavaScript typeof 中的语法错误

javascript - 我什么时候应该在我的 Angular JS 单元测试中使用 $provide 与 Jasmine Spies

javascript - 有没有解决 'Freeze' Angular scopes 和 children 未被使用的好方法

angularjs - Angular orderBy 评估表达式

javascript - 使用 jQuery 在具有相同名称函数的对象上触发事件时无限循环

javascript - $ ('form' )[0] 的替代品是什么?

JavaScript 模拟函数在测试中返回未定义

css - 如何在 Angular JS 中更改 SVG 的颜色

javascript - 根据选定的主要类别过滤选择类别(AngularJS)

javascript - ngRepeat track by : How to add event hook on model change?