如果你是AngularJS或整个Web开发领域的新手,我不确定这是否可行或者我是否选择了最有效的路径,但目前我需要一种方法使用两个输入框来过滤日期范围。我使用jQuery日期选择器始终将日期格式化为“YYYY-MM-DD”。
所以,我有以下两个输入框:
<label class="" for="DateFromFilter">
Date From:
</label>
<input date-picker type="text" id="DateFromFilter"
class="form-control"
title="Please enter in YYYY-MM-DD format."
ng-model="search.dueDate" />
<label class="" for="DateToFilter">
Date To:
</label>
<input date-picker type="text" id="DateToFilter"
class="form-control"
title="Please enter in YYYY-MM-DD format."
ng-model="search.toDate" />
当然,我有一个使用 ng-repeat 指令的表格,并从本地 JSON 文件获取数据……只有 dueDate 被接收。
<tr> ng-repeat="dateItem in dateItems | filter:search:strict | filter:dateFilter"
<td>{{dateItem.dueDate}}</td></tr>
我需要一种方法,比如说,
如果用户仅在dueDate字段上选择一个日期,则ng-repeat列表将过滤并列出该日期及之后的所有日期。
如果用户仅在toDate字段上选择一个日期,则ng-repeat列表将过滤并列出所有日期直到和包括该特定日期为止。
如果用户在两个字段上都选择了日期,则该列表将显示这两个日期之间的所有日期。
任何帮助或指导都将不胜感激!
谢谢!
---------------------------------------------更新-------------------------------
所以最终我尝试尽我所能编写自定义筛选函数...但它不起作用.... ;( 如果我删除加粗的条件语句,它有点起作用...
$scope.dateFilter = function (item) {
/*
* When the display starts, the inputs are undefined. also need to
* account for when the inputs are empty to return everything.
*/
if ((!angular.isUndefined($scope.dueDate) && $scope.dueDate != "" ) **&&
(angular.isUndefined($scope.toDate) || $scope.toDate == "" )**)
{
var inputDate = new Date($scope.dueDate);
var incomingDate = new Date(item.dueDate);
if (inputDate <= incomingDate)
{
return true;
}
else
{
return false;
}
}
else if ((!angular.isUndefined($scope.toDate) && $scope.toDate != "")**&&
(angular.isUndefined($scope.dueDate) || $scope.dueDate == "" )**)
{
var inputDate = new Date($scope.toDate);
var incomingDate = new Date(item.dueDate);
if (inputDate >= incomingDate)
{
return true;
}
else
{
return false;
}
}
else if ((!angular.isUndefined($scope.dueDate) && $scope.dueDate != "" )&&
(!angular.isUndefined($scope.toDate) && $scope.toDate != ""))
{
var inputDueDate = new Date($scope.dueDate);
var inputToDate = new Date($scope.toDate);
if (inputDueDate < item.dueDate && inputToDate > item.dueDate )
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
};