我有一个带有事件列表的 angularJS 控制器。每个事件都有日期和评论。我正在显示事件列表并希望隐藏相同的日期。
例如,如果我有:
{Date: "10/1/2013", Comment= "First Event"},
{Date: "10/1/2013", Comment= "Second Event"},
{Date: "10/2/2013", Comment= "Third Event"}
输出应该是:
10/1/2013 Tuesday
First Event
Second Event
10/2/2013 Wednesday
Third Event
这是我的模板:
<div data-ng-repeat="item in Events | filter:Filter | orderBy:SortBy:SortDesc">
<div data-ng-show="item.DisplayDate($index)" class="eventDate">{{ item.Date | date: 'M/dd/yyyy EEEE' }}</div>
<div class="comment" ng-bind-html-unsafe="item.Comment"></div>
<div style="clear:both"><br /></div>
</div>
我为每个事件项添加了一个函数,该函数比较事件日期,如果前一个事件具有相同的日期,则返回 false(隐藏事件日期 div)。
$scope.DisplayDate = function (idx) {
if (idx > 0) {
//get previous event
var previousEvt = $scope.Events[idx - 1];
//if previous event has the same date as this one - don't show subheader
if (previousEvt.Date.getTime() == $scope.Events[idx].Date.getTime())
return false;
else
return true;
}
else
return true;
}
如果我们不对事件数组应用过滤器或顺序,它会很好用。如果应用了订单/过滤器 - DisplayDate 方法在原始事件数组上进行评估(这是不正确的)。
问题是:
- 是否可以在 DisplayDate 方法中访问过滤/排序的事件数组?
- 还有其他方法可以显示/隐藏组标题吗?我想我可以应用一些日期分组并有两个嵌套的 ng-repeats 但它看起来更复杂。
谢谢,