仅限ng-repeat唯一值(组合重复)

时间:2016-01-09 19:23:42

标签: angularjs

我有这样的重复:

<option ng-repeat="item in items | orderBy:'priority'" 
    value="{{item.SAC}}.{{item.difficulty}}">
       {{item.SAC}}.{{item.difficulty}} - {{SACItem(item.SAC).description}}    
</option>

我希望它能够根据item.SACitem.difficulty组合任何重复项,如果这两个副本都是重复它们应该组合在一起,否则它们可能是分开的。

我尝试了独特的过滤器,但我无法使用2个变量。

1 个答案:

答案 0 :(得分:1)

您可以创建过滤器:

&#13;
&#13;
var app = angular.module('app', []);
app.controller('ctrl', function($scope) {
  $scope.items = [
    { name: 'john', age:45 },
    { name: 'tim', age: 36 },
    { name: 'bob', age: 44 },
    { name: 'john', age: 45 }
  ];
});

app.filter('unique', function() {
  
  var uniqueItems = [];
  function exists(item, parms) {
    return uniqueItems.some((i) => parms.every((p) => i[p] == item[p]));
  } 
  return function(arr, name, age) {
    
    if (arr) {
      uniqueItems.length = 0;
      angular.forEach(arr, function(item) {
        
        if (!exists(item, [name,age])) {
          uniqueItems.push(item);
        }
      });
      return uniqueItems;
    }
    return arr;
    
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.4.1/es5-shim.js"></script>
<div ng-app ="app" ng-controller="ctrl">
  <h1>Original Array</h1>
  <ul>
    <li ng-repeat="item in items">
      {{item.name }} - {{ item.age }}
    </li>
  </ul>

  <h1>Unique Array</h1>
  <ul>
    <li ng-repeat="item in items | unique:'name':'age'">
      {{item.name }} - {{ item.age }}
    </li>
  </ul>
</div>
&#13;
&#13;
&#13;

您也可以在控制器中使用此过滤器而不是视图:

app.controller('ctrl', function($scope, $filter) {
    var items = [...];
    $scope.items = $filter('unique')(items, 'name', 'age');
});