2014-09-26 185 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