你可以或多个过滤器

时间:2015-01-22 04:36:12

标签: angularjs angularjs-ng-repeat angularjs-filter

我有几个不同的自定义过滤器。在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时会发生什么。真的不想写一堆一次性的自定义过滤器。

想法?

0 个答案:

没有答案