【问题标题】:AngularJS how to have multiple $filter in a controller?AngularJS如何在控制器中有多个$filter?
【发布时间】:2016-06-13 07:45:22
【问题描述】:

leftValue 数组包含 JSON 信息,例如 { name: 'John', gender: 'male' } 我正在尝试在搜索栏中按名称和性别过滤信息。目前,过滤器仅按名称过滤。如何同时按姓名和性别进行过滤?

scope.leftValue = $filter('filter')( leftValue, {
                    'name': text
                    })

我尝试过的

scope.leftValue = $filter('filter')( leftValue, {
                    'name': text,
                    'gender': text,
                    })

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我觉得你有点搞混了。您可以像第二个示例一样指定对象映射。这就是docs 在您这样做时的状态。

    对象:模式对象可用于过滤特定属性 数组包含的对象。例如{name:"M", phone:"1"} 谓词将返回具有属性名称的项目数组 包含“M”和包含“1”的属性电话。特殊属性 名称$ 可用于(如{$:"text"})接受与任何 对象的属性或其嵌套的对象属性。那是 相当于与描述的字符串的简单子字符串匹配 多于。谓词可以通过在字符串前面加上 ! 来否定。 例如{name: "!M"} 谓词将返回一个项目数组 属性名称不包含 "M"

    这里要删除的重要内容是第二句和and。意思是为了匹配字符串,在你的情况下text,必须匹配地图中指定的所有属性。

    例如,如果名称仅为John,则仅搜索male 将不匹配。但搜索ma 会返回以下记录:

    {
       name: 'mark',
       gender: 'male'
    }
    

    仅供参考,您也可以通过视图按对象映射搜索,但它具有相同的限制。

    话虽如此,可以使用$ 通配符给它一个逗号分隔的属性列表。这将对任何属性进行or 匹配。

    {
       $: 'name,gender'
    }
    

    这里的问题是所有属性都将针对它们检查相同的值。

    这是fiddle showing他们的行动。

    其他答案很好地总结了替代方案,只是觉得他们缺乏解释正在发生的事情及其背后的原因。

    【讨论】:

    • 嗨,链接不是小提琴链接
    • 我试过 ''$': text,它会检查所有属性。我也试过 '$: "name,gender"': text 但它似乎不起作用。
    • @zainu 我不在电脑旁,但当我生病时更新小提琴链接。
    【解决方案2】:

    您可以使用过滤器链。

     var result1 = $filter('filter')( leftValue, {'name': text })
      var result2 = $filter('filter')( result1 , {'gender': text })
    

    【讨论】:

    • 您好,感谢您的回复。但是过滤器链可以检查“姓名”或“性别”吗?
    【解决方案3】:

    感谢您在控制器中所说的,但只是为了给您提供选项,您可以在 HTML 中完成所有操作。

    {{yourJSONLinkedToScope | filter: name | filter: gender}}
    

    其中名称和性别是输入框中的 ng-models。

    【讨论】:

      【解决方案4】:

      我认为最好用 html 来做。

      <tr ng-repeat="player in players | filter:{id: player_id, name:player_name} | filter:ageFilter">
      
      $scope.ageFilter = function (player) {
          return (player.age > $scope.min_age && player.age < $scope.max_age);
      }
      

      您可以在此链接中查看他们的做法:
      AngularJS multiple filter with custom filter function

      【讨论】:

      • 请在您的答案正文中发布链接的有用部分。如果链接断开,您的答案将毫无用处。我意识到它是指向另一个 SO 问题的链接,但如果该问题被删除。另外,这只是一个养成的好习惯。
      • 感谢您的建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多