仅在ng-repeat数组中过滤当前日期

时间:2015-12-01 03:24:28

标签: angularjs angularjs-ng-repeat

我有一个过滤器,它只需要返回数据数组中的当前日期:

app.filter('currentDates', function() {
  return function(eventdata) {
    var data_date, filtered_list, i, today;
    filtered_list = [];
    i = 0;
    while (i < eventdata.length) {
      today = Date.now();
      data_date = eventdata.date;
      if (today <= data_date) {
        filtered_list.push(data[i]);
      }
      i++;
    }
    return filtered_list;
  };
});

我正在调用html中的过滤器,如下所示:

<div class="event" ng-repeat="data in eventdata | currentDates"></div>

我无法弄清楚为什么没有归还。任何帮助赞赏。这是plunkr http://plnkr.co/edit/5aT4CF?p=preview。如果删除过滤器,则会填充数据。

2 个答案:

答案 0 :(得分:1)

正如评论中所解释的那样,您正在将Date类型与字符串进行比较。您需要对该字符串执行类型转换。

我还使用了for loop而不是while loop来节省几行空间。

您的过滤器功能应该如下所示

app.filter('currentDates', function() {
    return function(eventdata) {
        var filtered_list = [];
        for (var i = 0; i < eventdata.length; i++) {
            var today = Date.now();
            var data_date = new Date(eventdata[i].date).getTime();
            if (today <= data_date) {
                filtered_list.push(eventdata[i]);
            }
        }
    return filtered_list;
    };
});

这是更新的plunkr

http://plnkr.co/edit/qZrQEOJDtyBOWSkNnrZS?p=preview

答案 1 :(得分:1)

  1. 您的eventdata是数组而不是单个对象
  2. 您正在将字符串与日期进行比较
  3. 您正在推送数据[i]而不是eventdata [i]
  4. 试试这个

    while (i < eventdata.length) { 
      today = Date.now();
      data_date = new Date(eventdata[i].date);
      if (today <= data_date) {
        filtered_list.push(eventdata[i]);
      }
      i++;
    }
    

    PLUNKR