Я хочу выполнить ng-repeat над массивом, пропуская некоторые свойства, когда они являются дубликатами предыдущей итерации.
[
{
"id": "event1",
"date": "June 1st"
},
{
"id": "event2",
"date": "June 2nd"
},
{
"id": "event3",
"date": "June 2nd"
},
{
"id": "event4",
"date": "June 3rd"
}
]
Поскольку вы можете видеть, что дата дублируется для event2
и event3
...
<div ng-repeat="event in events">
<h2>{{event.date}}</h2>
<p>{{event.id}}</p>
<hr>
</div>
Таким образом, желаемый результат:
1 июня
event1
2 июня
event2
event3
3 июня
event4
Я думаю, это что-то вроде:
<div ng-repeat="event in events">
<h2 ng-if="<!--expression here-->">{{event.date}}</h2>
<p>{{event.id}}</p>
<hr>
</div>
Будет ли это функция моего контроллера прикреплена к переменной, вызванной в атрибуте ng-if?
И прежде всего, как бы я сформировал это выражение, чтобы делать то, что я хочу в этом случае?
Примечание. Это ТОЛЬКО рендеринг переменной даты, которую я хочу избежать, а не весь элемент ng-repeat.
Любая помощь или альтернативные предложения будут оценены.
Вы можете создать собственный фильтр для фильтрации уникальных элементов:
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'
group by
в переменной даты. Пожалуйста, смотрите этот пост