所以我正在尝试使用angular和ng-table创建一个过滤器,以便我可以搜索范围(例如:5-10个偏移),<,>,> =,< =,!=。这样做的最佳方法是什么?我可能过于复杂了,因为我正在使用服务来缓存,排序,过滤数据,因此我没有$ scope访问权限(至少根据我的理解,我可以将承诺返回到控制器的范围)。 / p>
在我的服务中:
function transformData(data, params) {
var orderedData = params.sorting() ?
$filter('orderBy')(data, params.orderBy()) :
data;
for (var propt in params.filter()) {
if (params.filter().hasOwnProperty(propt) && params.filter()[propt] === '') {
delete params.filter()[propt];
}
}
return params.filter() ?
$filter('filter')(orderedData, customFilter(params.filter()), function (actual, expected) {
if (!isNaN(expected)) {
return (actual == expected)
}
$log.info('actual: ', actual, ' expected: ', expected);
return angular.lowercase(actual.toString()).indexOf(angular.lowercase(expected.toString())) > -1;
}) : orderedData;
}
我遇到的问题是:
function customFilter(filter) {
$log.debug('DS Filter:', filter);
if (filter['vacantLessThan']) { // This will be a dropdown, or something..
// Something..
} else if (filter['vacantLessThanEq']) {
// Something..
} else if (filter['vacantGreaterThan']) {
// Something..
} else if (filter['vacantGreaterThanEq']) {
// Something..
}
var keys = Object.keys(filter);
return function (item) {
var isEqual = true;
angular.forEach(keys, function (key) {
$log.debug(filter[key], ' vs ', item[key]);
if(!isNaN(filter[key])){
isEqual = !(item[key] == filter[key]) ? false : isEqual;
} else {
isEqual = !(angular.lowercase(item[key].toString()).indexOf(angular.lowercase(filter[key].toString())) > -1) ? false : isEqual;
}
});
return isEqual;
}
}
我应该废弃这个并使用ng-hide吗?