我有以下代码段:
<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}}
只有它是列表中的第一个唯一值。否则我想打印空白区""
。是否可以通过创建过滤器来完成此操作?或者其他任何方式?
答案 0 :(得分:2)
您可以通过检查上一个元素(items[$index-1]
)来解决您的问题,如果它的Action
字段等于当前元素(items[$index-1].Action == val.Action
),您应该写空字符串,否则写入值。对于此算法的正确性,您应该通过此字段实现排序。由于您有filter
和orderBy
,因此您不能只编写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>