如何显示 Angularjs 过滤计数

如果我们使用带有 ngRepeat 指令的 AngularJs 列表并在其上设置过滤器,我们可能想知道过滤后有多少项。
我们可以通过两种方式执行此操作,在模板中和使用 javascript(控制器)。

如何在模板中获取过滤器计数

让我们考虑例子

例子

<!DOCTYPE html>
<html>
  <head>
    <title>www.onitroad.com</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
  </head>
  <body data-ng-app="MyModule" data-ng-controller="MyController">
    <select data-ng-model="filterGender">
      <option value='male'>Male</option>
      <option value='female'>Female</option>
    </select>
    <ul>
      <li data-ng-repeat="user in usersList = (users | gender:filterGender)" data-ng-bind="user.name"></li>
    </ul>
    <h3>{{ usersList.length | number }}/{{ users.length }}</h3>
    <script>
      angular.module('MyModule', [])
       .controller('MyController', function($scope){
         $scope.users = [
            {name: 'Mike', gender: 'male', age: 23},
            {name: 'Jenifer', gender: 'female', age: 32},
            {name: 'Tom', gender: 'male',  age: 14},
            {name: 'Ellen', gender: 'female',  age: 42},
            {name: 'John', gender: 'male',  age: 22},
            {name: 'Hayk', gender: 'male', age: 18},
            {name: 'Eliana', gender: 'female', age: 28}
         ];
       })
       .filter('gender', function(){
         return function(users, gender){
           if(!gender){
             return users;
           }
           var arr = [];
           angular.forEach(users, function(v){
             if(v.gender === gender){
               arr.push(v);
             }
           })
           return arr;
         }
       })
    </script>
  </body>
</html>

如我们所见,我们可以将过滤结果收集到另一个变量中,然后使用该数组(获取其长度)。
“users”数组不变,表示“users”数组包含所有用户,“usersList”数组包含过滤后剩余的用户。

现在让我们尝试在控制器内部解决它。

如何在控制器中获取过滤器计数

<!DOCTYPE html>
<html>
  <head>
    <title>www.onitroad.com</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
  </head>
  <body data-ng-app="MyModule" data-ng-controller="MyController">
    <select data-ng-model="filterGender" ng-change="onGenderChange()">
      <option value='male'>Male</option>
      <option value='female'>Female</option>
    </select>
    <ul>
      <li data-ng-repeat="user in usersList" data-ng-bind="user.name"></li>
    </ul>
    <h3>{{ usersList.length | number }}/{{ users.length }}</h3>
    <script>
      angular.module('MyModule', [])
       .controller('MyController', function($scope, $filter){
         $scope.users = [
            {name: 'Mike', gender: 'male', age: 23},
            {name: 'Jenifer', gender: 'female', age: 32},
            {name: 'Tom', gender: 'male',  age: 14},
            {name: 'Ellen', gender: 'female',  age: 42},
            {name: 'John', gender: 'male',  age: 22},
            {name: 'Hayk', gender: 'male', age: 18},
            {name: 'Eliana', gender: 'female', age: 28}
         ];
         $scope.usersList = angular.copy($scope.users);
         $scope.onGenderChange = function(){
           $scope.usersList = $filter('gender')($scope.users, $scope.filterGender)
         };
       })
       .filter('gender', function(){
         return function(users, gender){
           if(!gender){
             return users;
           }
           var arr = [];
           angular.forEach(users, function(v){
             if(v.gender === gender){
               arr.push(v);
             }
           })
           return arr;
         }
       })
    </script>
  </body>
</html>
日期:2020-06-02 22:18:46 来源:oir作者:oir