【发布时间】:2014-10-03 16:35:58
【问题描述】:
我正在尝试仅打印在 ng-repeat 中为“今天”安排的事件。我有一个部分显示所有事件,目前运行良好。这是代码:
<div ng-controller="mainCtrl">
<div ng-repeat="event in events | limitTo:100 | filter:tfilter | orderBy: 'date' | filterPastDates">
<div class="row">
<div class="col-md-6">
<h4>{{event.date | amDateFormat:'MMMM Do'}}</h4>
</div>
<div class="col-md-6">
<h4>{{event.name}}</h4>
</div>
</div>
使用 filterPastDates 过滤器,已通过的事件被删除。我使用以下方法解决了我今天的事件被删除的问题:
angular.module('zenCityApp')
.filter('filterPastDates', function () {
return function (events) {
if (events && events.length) {
var filtered = [];
var cutOffDate = moment().startOf('day').subtract(1, 'millisecond');
for (var i = 0; i < events.length; i++) {
var evt = events[i];
if (cutOffDate.isBefore(evt.date)) {
filtered.push(evt);
}
}
return filtered;
} else {
return events;
}
};
});
我正在尝试制作一个仅显示今天的事件的部分,但我无法使其正常工作。这是html(现在我只是想让它打印出日期):
<div class="col-md-6">
<div class="row">
<h2>Today's Events</h2>
</div>
<div class="row">
<div ng-controller="mainCtrl">
<div ng-repeat "event in events | orderBy: 'date' | eventDateFilter">
<h4>{{event.date | amDateFormat:'MMMM Do'}}</h4>
</div>
</div>
</div>
</div>
这是我尝试使用的过滤器,基于我上面使用的过滤器:
angular.module('zenCityApp')
.filter('eventDateFilter', function () {
return function (events) {
if (events && events.length) {
var eventsToday = [];
var startOfDay = moment().startOf('day').subtract(1, 'millisecond');
var endOfDay = moment().endOf('day');
for (var i = 0; i < events.length; i++) {
var evt = events[i];
if (startOfDay <= evt.date <= endOfDay) {
eventsToday.push(evt);
}
}
return eventsToday;
}
};
});
任何帮助将不胜感激!
【问题讨论】:
-
在什么情况下它不起作用?您是否尝试在过滤器中设置断点并单步执行代码?
-
马上我看到了filtered.push(evt);在你的应该是 eventsToday.push(evt);
-
你确定 evt.date 可以严格等于 cutOffDate 吗?你不应该把它放在 startOf('day') 和 endOf('day') 之间吗?
-
@Sycomor 感谢这帮助我更接近。这就是我现在所拥有的,它正在打印出我所有的事件。我觉得我的逻辑有点不对劲:
-
查看上面的更新代码
标签: angularjs filter firebase momentjs