我有一个自定义过滤器,对于输入日期字段,我有一个$ scope过滤器,以17/07/2017的格式显示字符串。任何人都可以帮助我如何在我的自定义过滤器功能中使用$ scope过滤器。
我的控制器功能
app.controller('OutletController', function ($scope, itemsFactory, $filter) {
itemsFactory.getItems().success(function (data) {
$scope.outlets = data;
})
$scope.fromDate = $filter('date')($scope.from_date, "yyyy-MM-dd");
$scope.toDate = $filter('date')($scope.to_date, "yyyy-MM-dd");
$scope.format = function (from_date) {
$scope.fromDate = $filter('date')(from_date, "yyyy-MM-dd");
//console.log($scope.fromDate);
}
$scope.format = function (to_date) {
$scope.toDate = $filter('date')(to_date, "yyyy-MM-dd");
// console.log($scope.toDate);
}
$scope.parseInt = function (data) {
if (data == null) return "";
return parseInt(data);
};});
我的HTML
<input type="date" ng-model="from_date" ng-change="format(from_date)">
<input type="date" ng-model="to_date" ng-change="format(to_date)">
ng repeat
<tr ng-repeat="item in outlets | dateRange: {from_date:from_date, to_date:to_date, select: selected.field, select2: selectedone.field} ">
<td>{{ parseInt(item.offerID) }}</td>
<td>{{ item.merchant }}</td>
<td>{{ item.startDate }}</td>
我的自定义过滤器
app.filter('dateRange', function ($filter) {
return function (input, params, fromDate, toDate) {
var from_date = fromDate;
var to_date = toDate;
if (isNaN(params.fromDate)) {
filtered = input;
}
else {
var filtered = [];
angular.forEach(input, function (item) {
if (params.select2 === "strtdate" && params.select === "gt") {
console.log(fromDate);
if (item.startDate > params.from_date) {
filtered.push(item);
}}
else {
if (item.startDate == params.fromDate) {
output.push(item);
}}
});
}
return filtered;
};
});
每当将输入日期放在from_date字段中时,它应该过滤日期&gt;而不是数据表中的输入日期。
提前感谢!
答案 0 :(得分:0)
您可以尝试以下代码,也可以查看此plunker链接,了解您的示例方案。
<强>模板:强>
<input type="date" ng-model="Range.From">
<input type="date" ng-model="Range.To">
<table border="1">
<tr ng-repeat="item in outlets | dateRange: Range">
<td>{{ item.offerID }}</td>
<td>{{ item.merchant }}</td>
<td>{{ item.startDate | date: 'yyyy-MM-dd' }}</td>
</tr>
</table>
<强>控制器:强>
app.filter('dateRange', function ($filter) {
return function (input, params) {
if(params.From || params.To){
var filtered = [];
angular.forEach(input, function (item) {
var strDate = new Date(item.startDate);
if(item.startDate >=params.From && item.startDate <= params.To){
filtered.push(item);
}else if(item.startDate >= params.From && (params.To===null || params.To===undefined)){
filtered.push(item);
}else if(item.startDate <= params.To && (params.From===null || params.From===undefined)){
filtered.push(item);
}
});
return filtered;
} else return input;
};
});