假设您使用的是 1.0.x 分支,则用于过滤对象的源代码的相关部分显示在下面的脚注中。这表明标准过滤器找到了要测试的键,然后var text = (''+expression[key]).toLowerCase();
在调用之前从您的搜索条件中获取search
。search
然后使用 ( indexOf(text) > -1
.
因此,您不能将搜索条件中的一项设置为需要以您尝试的方式进行评估的表达式。
您唯一的其他选择是:
- 使用谓词函数作为过滤器的参数(这只需要返回真/假);或者
- 编写自己的过滤器(这只需要从原始数组返回一个新数组)。
谓词函数
$scope.myFilterTest(item) { return ... true or false test result ...; }
和:
<tr data-ng-repeat="rule in rules | orderBy:sortOrder | filter:myFilterTest">
自定义过滤器
var someApp=angular.module('myApp', []);
someApp.filter('complexFilter', function() {
return function(input, criteria) {
var result = [];
for (var i = 0; i < input.length; i++) {
if(... multiple tests ...){
result.push(input[i]);
}
}
return result;
}
});
进而:
<tr data-ng-repeat="rule in rules | orderBy:sortOrder | complexFilter:filterOrder">
脚注:
src/ng/filter/filter.js 的相关部分
case "object":
for (var key in expression) {
if (key == '$') {
(function() {
var text = (''+expression[key]).toLowerCase();
if (!text) return;
predicates.push(function(value) {
return search(value, text);
});
})();
} else {
(function() {
var path = key;
var text = (''+expression[key]).toLowerCase();
if (!text) return;
predicates.push(function(value) {
return search(getter(value, path), text);
});
})();
}
}
break;