使用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>

 

转载于:https://www.cnblogs.com/darrenji/p/5183019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值