我有几个不同的自定义过滤器。在ng-repeat中,我想基于一个过滤器或另一个过滤器过滤结果,而不是两个过滤器。
我知道这里存在一个根本性缺陷,我认为这些过滤器应用于管道中,因此“ORing”过滤器实际上没有意义。
想知道如何实现这个目标?
示例:
过滤以匹配用户名的任何部分(第一个+最后一个)
angular.module('filters', []).filter('fullname', function() {
return function(users, search) {
var match = new RegExp(search, 'i');
return users.filter(function (user) {
var fullname = user.firstname + " " + user.lastname;
if (match.test(fullname)) return true;
});
};
});
过滤以匹配电子邮件。简单的不需要它,因为我可以使用过滤器:{email:param}。
angular.module('filters', []).filter('email', function() {
return function(users, search) {
var match = new RegExp(search, 'i');
return users.filter(function (user) {
if (match.test(user.email)) return true;
});
};
});
在一个部分我只关心匹配全名,效果很好:
<input type="text" ng-model="query">
<div ng-repeat="user in users | fullname:query>
在另一个我只在电子邮件上匹配(完美):
<input type="text" ng-model="query">
<div ng-repeat="user in users | email:query>
或(没有自定义电子邮件):
<input type="text" ng-model="query">
<div ng-repeat="user in users | filter:{email: query}>
但我可以使用我已经拥有的过滤器来匹配多个吗?
<input type="text" ng-model="query">
<div ng-repeat="user in users | fullname:query | filter: {email: query}>
问题在于应用了全名过滤器,然后应用了电子邮件过滤器。是否有不同的方法可以让它匹配全名或电子邮件而不是AND?
我知道最后我可以编写另一个过滤器来过滤全名或电子邮件。但是当我想要第3,第4或第5时会发生什么。真的不想写一堆一次性的自定义过滤器。
想法?