我有一个定制的角度过滤器,我试图使更通用。该筛选器将查看员工的集合,并根据自雇用员工以来已过的月数对列表进行筛选。我试图使过滤器更通用,这样我就可以在有日期但将有不同属性名称的其他列表上使用它(例如:在过去的xx个月中创建的过滤器发票)。如何传递要筛选的属性的名称,或者如何传递仅为date属性而不是整个对象的集合?
html
<html ng-app="dateFilterTest">
<head>
</head>
<body ng-controller="filterController">
<select ng-model="maxLookBack">
<option value="6">6 Months</option>
<option value="12" selected="selected">1 Year</option>
<option value="24">2 Year</option>
<option value="999">All</option>
</select>
<ul>
<li ng-repeat="person in people | DateAgeFilter:maxLookBack">{{person.name}}</li>
</ul>
</body>
<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="js/controllers/dateFiltercontroller.js"></script>
</html>js
var app = angular.module('dateFilterTest', []);
app.filter('DateAgeFilter', function(){
return function(items, maxage) {
var minDate = new Date()
minDate.setMonth(minDate.getMonth() - maxage);
var result = [];
for (var i=0; i<items.length; i++) {
if (items[i].hireDate.getTime() > minDate.getTime()) {
result.push(items[i]);
}
}
return result;
};
});
app.controller('filterController', function($scope){
$scope.people = [
{'name': 'Person 1',
'hireDate': new Date('Jun 1, 2013')},
{'name': 'Person 2',
'hireDate': new Date('Aug 1, 2012')},
{'name': 'Person 3',
'hireDate': new Date('May 1, 2011')},
{'name': 'Person 4',
'hireDate': new Date('Jun 1, 2012')},
{'name': 'Person 5',
'hireDate': new Date('Mar 1, 2014')},
{'name': 'Person 6',
'hireDate': new Date('Mar 1, 2014')},
];
});柱塞:
发布于 2014-03-07 16:45:28
您可以将属性名称作为附加参数传递给类似过滤器的so (使用额外的冒号分隔符):
DateAgeFilter:maxLookBack:'hireDate'下面是更改过滤器以利用此功能的一个示例,并进行了2次更改:
1)附加参数-我在这里称它为field。
2)为了使用参数指定属性,我们将从点符号转换为括号符号--将items[i].hireDate.getTime()转换为items[i][field].getTime()。
app.filter('DateAgeFilter', function(){
return function(items, maxage, field) {
var minDate = new Date()
minDate.setMonth(minDate.getMonth() - maxage);
var result = [];
for (var i=0; i<items.length; i++) {
if (items[i][field].getTime() > minDate.getTime()) {
result.push(items[i]);
}
}
return result;
};
});https://stackoverflow.com/questions/22255573
复制相似问题