2014-09-26 3 views
1

Мне было интересно, может ли кто-нибудь помочь мне. В настоящее время я пытаюсь получить фильтр даты для работы в Angular. Я мог бы сделать это совершенно неправильно, но просто подумал, что я спрошу.Угловой фильтр диапазона дат

У меня в настоящее время есть цикл ng-repeat, проходящий через массив объектов. Мои объекты имеют следующие поля: title, sentBy и recevied. Получено в формате UTC, и мой фильтр в основном принимает два входа также в формате utc для даты начала и окончания. Затем фильтр проверяет, превышает ли полученное значение дату или меньше или равно ее дате окончания. Моя проблема в том, что вход в фильтр является входом всего объекта. Я не уверен, как получить доступ к полученному полю объекта внутри фильтра, чтобы выполнить сравнение. Я попробовал input.received, но он, похоже, не работал. heres образец моего кода.

.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

ответ

0

Try ниже кода. Вам нужно сравнить время.

.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 undefined, возможно, я делаю что-то глупое. Спасибо за ответ, хотя. Поскольку его массив объектов мне нужно каким-то образом получить индекс массива? – J145

+0

Просто протестирован, мне нужен индекс массива, который мне кажется, теперь мне нужен какой-то метод увеличения или передачи индекса. Будет немного поразвлекнут с ним и посмотрю, смогу ли я найти решение. Благодарю. – J145

+0

Бах, похоже, не в состоянии выяснить, как передать соответствующий индекс массива через фильтр, любые предложения? – J145

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.

Смежные вопросы