1.0.x ブランチを使用していると仮定して、オブジェクトのフィルタリングに関連するソース コードの部分を以下の脚注に示します。これは、標準フィルターがテストするキーを見つけて、 をvar text = (''+expression[key]).toLowerCase();
呼び出す前に検索条件から取得することを示していますsearch
。search
次に、 ( を使用してテキスト検索を行いますindexOf(text) > -1
。
したがって、検索条件の項目の 1 つを、試みている方法で評価を必要とする式に設定することはできません。
他の唯一のオプションは次のとおりです。
- フィルターのパラメーターとして述語関数を使用します (これは true/false を返す必要があるだけです)。また
- 独自のフィルターを作成します (元の配列から新しい配列を返す必要があるだけです)。
述語関数
$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;