【问题标题】:How to filter multiple values (OR operation) in angularjs if filter is false如果过滤器为假,如何在angularjs中过滤多个值(或运算)
【发布时间】:2016-01-18 02:20:31
【问题描述】:

在使用多个过滤器时遇到了一些问题。一个过滤器效果很好,如果添加第二个过滤器 ng-repeat 使用运算符 AND 获取过滤器,但如果第一个为 FALSE,我需要使用第二个过滤器。

function Ctrl($scope) {
  $scope.users = [
    {"id":1,"username":"", "age": "18"},
    {"id":8,"username":"betty", "age": ""},
    {"id":14,"username":"", "age": "18"},
    {"id":3,"username":"jumbo1", "age": ""},
  ]
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app>
  <div ng-controller="Ctrl">
    <div ng-repeat="user in filtered = (users | filter:{ 'username':'betty'}:true)">
      <span>{{ user.id }}</span>
    </div>  
  Users: {{users.length}}<br>
  Filtered Users: {{filtered.length}}    
  </div>
</body>

多个过滤器,例如,不起作用:

filter:{ 'username':'betty'} || { 'age':'18'}

如果第一个过滤器为 FALSE,最后需要使用第二个过滤器

【问题讨论】:

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


    【解决方案1】:

    为此,您需要在控制器中创建一个简单的过滤器功能。例如,用法可能是这样的:

    users | filter:userFilter({username: 'betty', age: 18}
    

    这是一个演示:

    angular.module('demo', []).controller('Ctrl', Ctrl);
    
    function Ctrl($scope) {
      $scope.users = [
        {"id":1,"username":"", "age": "18"},
        {"id":8,"username":"betty", "age": ""},
        {"id":14,"username":"", "age": "18"},
        {"id":3,"username":"jumbo1", "age": ""},
      ];
        
      $scope.userFilter = function(filter) {
        return function(user) {
          return user.username == filter.username || user.age == filter.age;
        };  
      };
    }
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script>
    <body ng-app="demo">
      <div ng-controller="Ctrl">
        <div ng-repeat="user in filtered = (users | filter:userFilter({username: 'betty', age: 18}))">
          <span>{{ user | json }}</span>
        </div>
        <pre>Users: {{users.length}}<br>Filtered Users: {{filtered.length}}</pre>    
      </div>
    </body>

    【讨论】:

    • 抱歉,有小问题。我有多级 JSON,例如 {"id":1,"username":"", "age": [{"years":18,"gender":"male"}]}。如何按性别或年龄过滤,尝试像 age[0].years 但什么都没有......
    • 我猜return user.username == filter.username || user.age[0].years == filter.years
    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多