角度视图中的多个滤镜

时间:2014-01-12 08:13:44

标签: angularjs angularjs-ng-repeat angular-ui

我有这个

<li ng-repeat="phone in (filteredNumber =  (phones | filter : 'jason Raq'))">

这很好用并告诉我json Raq的名字作为过滤结果,但现在我需要两个名字。杰森和马克

我试过这个让它工作但没有成功

<li ng-repeat="phone in (filteredNumber =  (phones | filter : {'jason Raq':'Mark'}))">

我也试过

<li ng-repeat="phone in (filteredNumber =  (phones | filter : 'jason Raq' | filter :'Mark'))">

但没有运气......我们如何做多个过滤器?

3 个答案:

答案 0 :(得分:2)

您可以使用控制器功能来获取filteredNumber这样的

<li ng-repeat="phone in phones | filter : filterByName">
   <span ng-bind="phone.name"></span>
</li>

并在您的控制器中

$scope.filterByName= function(phone){
   return (phone.name === 'jason Raq') || (phone.name === 'Mark');
}

Demo

答案 1 :(得分:1)

尝试将名称放在数组上,然后根据该数组过滤phones

<li ng-repeat="phone in (filteredNumber =  (phones | filter : ['jason Raq','Mark'])">

答案 2 :(得分:1)

试试这个:

<li ng-repeat="phone in (filteredNumber = (phones | filter : 'jason Raq').concat((phones | filter : 'Mark')))">

DEMO

这有效,但似乎你误解了角度滤波器的概念。

过滤器值用于匹配满足该值的元素。

在您的代码中,您希望指定多个值并使用 OR 条件来匹配满足其中一个值的任何元素。

如果您需要执行此类操作,则必须编写自定义过滤器。像这样:

app.filter('customFilter', function() {
    return function(input, filterValues) {
      var out = [];
      for (var i = 0; i < input.length; i++) {
         if (filterValues.indexOf(input[i]) >= 0){
           out.push(input[i]);
         }
      }

      return out;
    }
  });

使用它:

<li ng-repeat="phone in (filteredNumber = (phones | customFilter : ['jason Raq','Mark']))">

或者:

<li ng-repeat="phone in phones | customFilter : ['jason Raq','Mark']">

DEMO