Вы должны смотреть в список в вашей стоимости (т.е. это members
атрибут), чтобы увидеть, если вы можете найти по крайней мере один элемент, отвечающий условиям вашего фильтра из параметров:
angular.module('app', [])
.filter('myfilter', function() {
return function(value, expected) {
return value && value.members && (value.members || []).indexOf(expected) >= 0; // this checks if at least one value from members matches the given filter param
};
})
Затем используйте его в качестве такового:
<div ng-repeat=comp in companies | myfilter:'nick'>{{comp.id}}</div>
и
<div ng-repeat=comp in companies | myfilter:'nick' | myfilter:'john'>{{comp.id}}</div>
Примечание: что обжигающе их будет эффект активировать эффект «И». Теперь это не самый результативный результат, но для небольших списков это не проблема.
В качестве альтернативы вы можете разрешить передачу массива в качестве параметра и выполнить проверку «И» в функции фильтра - это будет немного больше производительным:
angular.module('app', [])
.filter('myfilter', function() {
return function(value, expected) {
return value && value.members &&
(expected || []).every(function(exp) { return value.members.indexOf(exp) >= 0; })
};
})
Затем используйте как:
<div ng-repeat=comp in companies | myfilter:['nick','john']>{{comp.id}}</div>
Не: е используйте every
для AND, могут быть легко изменены, чтобы some
для эффекта ИЛИ. Вы даже можете параметризовать тип операции, как таковой:
.filter('myfilter', function() {
return function(value, type, expected) {
return value && value.members &&
(expected || [])[type](function(exp) { return value.members.indexOf(exp) >= 0; })
};
})
Затем вы можете использовать его также для эффекта ИЛИ:
<div ng-repeat=comp in companies | myfilter:'every':['nick','john']>{{comp.id}}</div>
<div ng-repeat=comp in companies | myfilter:'some':['nick','john']>{{comp.id}}</div>
вы хотите перечислить запись, где ник зарегистрирован или где ник и john оба являются членами? –
Я хочу список 2 case.separately – Serhiy