私は、ui-selectを使ってangleでlitlleプログラムを書いた。そして私は、異なるフィールドでOR検索を行うフィルタを書いた。ここで
は私の元フィルタである:(完璧に動作whic)
app.filter('orSearchFilter', function($parse) {
return function(items, props) {
var out = [];
if (angular.isArray(items)) {
var keys = Object.keys(props);
items.forEach(function(item) {
var itemMatches = false;
for (var i = 0; i < keys.length; i++) {
var prop = $parse(keys[i])(item);
var text = props[keys[i]].toLowerCase();
if (prop && prop.toString().toLowerCase().indexOf(text) !== -1) {
itemMatches = true;
break;
}
}
if (itemMatches) {
out.push(item);
}
});
} else {
out = items;
}
return out;
};
});
そして、ここに私の元plunker(作品)です:http://plnkr.co/edit/IdqO5dtLXmC6gtqLxRdP?p=preview
問題は、私のフィルタはならないことですジェネリックであり、コントローラの中で最終コードに使用します。だから私はそれを付けたい。
$scope.orSearchFilter = function($parse) {
return function(items, props) {
var out = [];
if (angular.isArray(items)) {
var keys = Object.keys(props);
items.forEach(function(item) {
var itemMatches = false;
for (var i = 0; i < keys.length; i++) {
var prop = $parse(keys[i])(item);
var text = props[keys[i]].toLowerCase();
if (prop && prop.toString().toLowerCase().indexOf(text) !== -1) {
itemMatches = true;
break;
}
}
if (itemMatches) {
out.push(item);
}
});
} else {
out = items;
}
return out;
};
};
最後に、私のhtmlで、私はこの新しいと呼ばれる(...私はすべての変更をしなかった):ここでは
は、コントローラに接続されているフィルタの 新しいバージョンですこのラインを使用してフィルタ:<ui-select-choices group-by="groupByLetter"
repeat="contract in (contracts |
filter : orSearchFilter(contracts, {id.id: $select.search, policy.info.name : $select.search }) |
orderBy: 'name') track by contract.name">
{{contract.name}} - {{contract.value}} ---- {{contract.id.id}} *** {{contract.policy.info.name }}
</ui-select-choices>
あなたは私がその問題を解決し、コントローラのスコープにこのフィルターを取り付けるために私を助けるために助けてくださいことはできますか?
ありがとうございました!
このようにするとどのようなユースケースですか?それはむしろ奇妙です。 – maurycy
これは一般的なフィルタにしないことです(私はすでに数回だけコントローラ内で使用することを知っているためです)。それが私がコントローラの範囲にそれを取り付ける理由です! – salamanka44
IMHOそれはあまり意味がありません、あなたはすでにテンプレート '{{whatever |またはsearchFilter:searchObject}} 'またはjavascript' $ filter( 'orSearchFilter')(何でも、searchObject) 'に追加し、コントローラーで余分なロジックを追加するだけで、不要なコードで汚染されます。 – maurycy