在ng-repeat中仅打印唯一值

时间:2017-03-21 10:03:36

标签: javascript angularjs

我有以下代码段:

 <tr ng-repeat="val in myObj">
   <td>{{val.Action}}</td>
   <td>{{val.Tx}}</td>
   <td>{{val.Qty}}</td>
   <td>{{val.Price}}</td>
 </tr>

我想打印{{val.Action}}只有它是列表中的第一个唯一值。否则我想打印空白区""。是否可以通过创建过滤器来完成此操作?或者其他任何方式?

1 个答案:

答案 0 :(得分:2)

您可以通过检查上一个元素(items[$index-1])来解决您的问题,如果它的Action字段等于当前元素(items[$index-1].Action == val.Action),您应该写空字符串,否则写入值。对于此算法的正确性,您应该通过此字段实现排序。由于您有filterorderBy,因此您不能只编写myObj[$index-1],因为myObj数组和已过滤的&amp; sorter数组(items)不一样,所以你应该申请分配:items = (myObj...

angular.module('app', []).controller('MyController', ['$scope', function($scope) {
    $scope.myObj = [
      {Action:'Action3', Tx:4, Symbol: 'a' },
      {Action:'Action1', Tx:1, Symbol: 'c' },
      {Action:'Action2', Tx:3, Symbol: 'b' },      
      {Action:'Action3', Tx:5, Symbol: 'a' },
      {Action:'Action1', Tx:2, Symbol: 'c' },            
      {Action:'Action3', Tx:6, Symbol: 'a' }
    ];
}])
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>

<body ng-app="app">
  <div ng-controller="MyController">
   <input type='text' ng-model='someValue' ng-init='someValue="a"'/>   
   <table>
     <tbody>
       <tr ng-repeat="val in items = (myObj | filter : { Symbol: someValue } | orderBy: 'Action')">
       <td>{{(items[$index-1] && items[$index-1].Action == val.Action) ? '' : val.Action}}</td>
       <td>{{val.Tx}}</td>
       <td>{{val.Symbol}}</td>       
     </tr>
     </tbody>
   </table>
</div>
</body>