у меня есть простой нг-повторить подобное:Как использовать угловой фильтр по нескольким свойствам объекта
<input type="text" ng-model="vm.filter">
<div ng-repeat="tenant in vm.tenants | filter : vm.filter : vm.contains">
</div>
Теперь я хочу, чтобы фильтровать жильцов на основе значения фильтра, например, найти, если имя арендатора содержит выражение фильтра, как тот
function contains(actual, expected) {
return actual.name.indexOf(expected) >= 0;
}
То, что я не понимаю, почему я получаю tenant.name
в содержит функцию вместо самого tenant
. Я знаю, что для простого случая я могу сделать что-то вроде filter | {name: vm.filter} | vm.contains
, но что делать, если я хочу сделать фильтрацию на основе нескольких свойств (например, имя, телефон и т. Д.)
Да, я понял это, отлаживая, что он делает глубокое сравнение. Есть ли способ не делать этого? Я хочу иметь свою собственную логику в предоставляемой функции на основе самого объекта, но по какой-то причине кажется невозможной. –
. Вы можете поместить свою функцию фильтрации в качестве первого параметра для фильтрации и прямого использования vm.filter из области действия или сделать что-то вроде https://jsfiddle.net/u9rq7afk/ (введите 'abc', чтобы получить 2 подходящих арендатора) – potatopeelings
Да, спасибо, что, похоже, это трюк, я пропустил, что параметр выражения может принять эту функцию. –