2014-09-26 152 views
1

我想知道是否有人可以帮助我。我目前正在尝试让日期过滤器在Angular中工作。我可能会用完全错误的方式去解决这个问题,但只是想我会问。我现在有一个ng-repeat循环对象数组。我的对象有以下字段:title,sentBy和recevied。收到的格式为UTC格式,我的过滤器基本上也以utc格式接受两个输入,用于开始和结束日期。然后筛选器检查收到的是否大于或等于开始日期或小于或等于结束日期。我的问题是,过滤器的输入是整个对象的输入。我不知道如何访问过滤器中的对象的接收字段来进行比较。我尝试input.received但它似乎没有工作。继承人我的代码样本。角度日期范围过滤器

.filter('dateRange', function(){ 

return function(input, startDate, endDate) { 

    if(input.received >= startDate && input <= endDate){ 
     return input; 
    } 

}; 

})

正如我说我可能会对此完全错误的,但任何帮助,将不胜感激。

编辑: 我的HTML代码如下简单:

<div ng-repeat="message in messages | dateRange: startDate : endDate " > 
+0

请提供更多代码:您应该添加您将过滤器传递给元素的HTML。 – Bolza 2014-09-26 08:44:07

回答

0

试试下面的代码。你需要比较时间。

.filter('dateRange', function(){ 

    return function(input, startDate, endDate) { 
     angular.forEach(input, function(obj){ 

     if(obj.received.getTime() >= startDate.getTime() && obj.received.getTime() <= endDate.getTime()) { 
      return obj; 
     } 
     }); 

    }; 
}); 

<div ng-bind="messages | dateRange: startDate : endDate " ></div> 
    or 
<div> {{messages | dateRange: startDate : endDate }}</div> 
+0

不幸的是,当试图访问input.received我得到了错误input.received是未定义的,也许我做了一些愚蠢的事情。感谢您的回复。因为它的一个对象数组是否需要以某种方式获取数组的索引? – J145 2014-09-26 08:58:30

+0

刚刚经过测试,我需要数组索引,现在我需要一些增加或传递索引的方法。请稍后再玩一下,看看我能否想出一个解决方案。谢谢。 – J145 2014-09-26 09:01:19

+0

Bah似乎无法弄清楚如何通过过滤器传递数组的适当索引,有什么建议吗? – J145 2014-09-26 09:21:22

0

在代码中的过滤器正在消息阵列,这意味着第一个参数(输入)是数组,并返回类型必须是一个数组太。看看here

你的代码应该是这样的:

<div ng-repeat="message in messages | dateRange: startDate : endDate" > 

您的过滤器:

.filter('dateRange', function() { 
    return function(input, startDate, endDate) { 

     var retArray = []; 

     angular.forEach(input, function(obj){ 
     var receivedDate = obj.received; 

     if(receivedDate >= startDate && receivedDate <= endDate) { 
      retArray.push(obj);   
     } 
     }); 

     return retArray; 
    }; 
}); 

这里是一个plunker