【问题标题】:Show only today's events in ng-repeat在 ng-repeat 中仅显示今天的事件
【发布时间】: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


【解决方案1】:

您不能链接不等式检查:startOfDay &lt;= evt.date &lt;= endOfDay 不是相关的布尔检查:它实际上是有效的,但等效于 (startOfDay &lt;= evt.date) &lt;= endOfDay(true | false) &lt;= endOfDay,无论出于何种意图和目的,它始终是正确的。

请仔细检查一下:if (startOfDay.isBefore(evt.date) &amp;&amp; evt.date.isBefore(endOfDay)) ... 应该会给您想要的答案。

【讨论】:

  • 谢谢@Sycomor!在我看到你的评论之前,类似的东西起作用了: if (startOfDay
猜你喜欢
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多