ng-repeat跳过重复的属性

时间:2016-05-16 08:21:21

标签: angularjs duplicates expression ng-repeat repeat

我想对数组执行ng-repeat,当它们与前一次迭代重复时跳过某些属性。

模型(“事件”数组)

[
   {
   "id": "event1",
   "date": "June 1st"
   },
   {
   "id": "event2",
   "date": "June 2nd"
   },
   {
   "id": "event3",
   "date": "June 2nd"
   },
   {
   "id": "event4",
   "date": "June 3rd"
   }
]

您可以看到event2event3 ...

的日期重复

HTML

<div ng-repeat="event in events">  
  <h2>{{event.date}}</h2>
  <p>{{event.id}}</p>
  <hr>
</div>

所以期望的结果是:

6月1日
事件1

6月2日
事件2
EVENT3

6月3日
EVENT4

我的猜测是这样的:

<div ng-repeat="event in events">  
  <h2 ng-if="<!--expression here-->">{{event.date}}</h2>
  <p>{{event.id}}</p>
  <hr>
</div>

我的控制器中的函数是否附加到ng-if属性中调用的变量?

主要是,在这种情况下,我如何形成表达式来做我想做的事情?

注意:我只想渲染 date 变量,而不是整个ng-repeat元素。

任何帮助或其他建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以创建自定义过滤器来过滤掉唯一的项目:

app.filter('uniq', function() {
    return function(items, param) {
        var filteredItems = [];
        items.forEach(function(item) {
            var found = filteredItems.some(function(elem) {
                return elem.param === item.param;
            });
            if(!found) {
                filteredItems.push(item);   
            }
        });
        return filteredItems; 
    }
});

像这样使用:

event in events | uniq: 'date'