我想知道是否有人可以帮助我。我目前正在尝试使日期过滤器在Angular中工作。我可能会以完全错误的方式进行此操作,但只是想问一下。
我目前在整个对象数组中进行ng-repeat循环。我的对象具有以下字段:标题,sentBy和已显示。收到的格式为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 " >
尝试下面的代码。您需要比较时间。
.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>
在您的代码中,过滤器正在处理[[messages数组,这意味着第一个参数(input)是数组,并且返回类型也必须是数组。看看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。