使用AngularJS中的filterFilter函数进行过滤

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用AngularJS中的filterFilter函数进行过滤相关的知识,希望对你有一定的参考价值。

 

AngularJS中有一个filterFilter函数用来对集合过滤,非常方便。

源代码大致如下:

 

function filterFilter(){
    return function(aray, expression comparator){
        if(!isArray(array)) return array;
        
        var comparatorType = typeof(comparator),
            predicates = [],
            evaluatedObjects = [];
        
        predicates.check = function(value){
            for(var j = 0; j < predicates.length; jii){
                if(!predicates[j](value){
                    return false;
                })
            }
            return true;
        }
        
        if(comparatorType != ‘function‘{
            if(comparatorType === ‘boolean‘ && comparator){
                comparator = function(obj, text){
                    return angular.equals(obj, text);
                }
            } else {
                comparator = function(obj, text){
                    ...
                }
            }
        }) 
    }
}

 

controller部分如下:

 

angular
  .module(‘app‘)
  .controller(‘MainCtrl‘, [‘$scope‘,
    function($scope) {
    $scope.users = $scope.users = [
        {name: ‘‘, email: ‘‘, joined: 2015-1-1}
    ];

    $scope.filter = {
      fuzzy: ‘‘,
      name: ‘‘
    };

    ...

  }]);

 

■ 搜索所有任意字段

 

<input type="text" ng-model="filter.any" >

<tr ng-repeat="user in users | filter: filter.any">
    <td>{{user.name}}</td>
    <td>{{user.email}}</td>
    <td>{{user.joined | date}}</td>
</tr>

 


■ 搜索某个字段

 

<input type="text" ng-model="filter.name">

<tr ng-repeat="user in users 
    | filter: filter.any
    | filter: {name: filter.name}">
    <td>{{user.name}}</td>
    <td>{{user.email}}</td>
    <td>{{user.joined | date}}</td>
</tr>

 

如果想name字段完全匹配:

 

<tr ng-repeat="user in users 
    | filter: filter.any
    | filter: {name: filter.name}:true">
    <td>{{user.name}}</td>
    <td>{{user.email}}</td>
    <td>{{user.joined | date}}</td>
</tr>

 


■ 搜索时间段

contrlller部分修改为:

 

angular
  .module(‘app‘)
  .controller(‘MainCtrl‘, [‘$scope‘,
    function($scope) {
    $scope.users = $scope.users = [
        {name: ‘‘, email: ‘‘, joined: 2015-1-1}
    ];

    $scope.filter = {
      fuzzy: ‘‘,
      name: ‘‘
    };

    $scope.minDate = new Date(‘January 1, 2000‘);
    $scope.maxDate = new Date();

    $scope.min = function(actual, expected) {
      return actual >= expected;
    };

    $scope.max = function(actual, expected) {
      return actual <= expected;
    };

  }]);

 

页面部分为:

 

<input type="text" ng-model="fromDate" data-min-date="{{minDate}}">
<input type="text" ng-model="untilDate" data-max-date="{{maxDate}}">

<tr ng-repeat="user in users 
    | filter: filter.any
    | filter: {name: filter.name}
    | filter: {joined: untilDate}:max
    | filter: {joined: beforeDate}:min">
    <td>{{user.name}}</td>
    <td>{{user.email}}</td>
    <td>{{user.joined | date}}</td>
</tr>

 

以上是关于使用AngularJS中的filterFilter函数进行过滤的主要内容,如果未能解决你的问题,请参考以下文章

使用 Express 为 AngularJS 渲染一个 .ejs 模板并使用 AngularJS $scope 中的数据

责任链模式 - tomcat

AngularJS中的CORS错误

使用angularjs定义html中的属性ng-attr-(suffix)

使用数组中的元素使用 AngularJS 更改状态

如何使用 AngularJS 保护 Laravel 4 中的 API 访问