AngularJS:视图中包含多个参数的自定义过滤器

时间:2015-09-01 14:29:45

标签: angularjs filter

我有这样的过滤器:

  .filter('searchFilter', function() {
    function contains(src, value, except) {
      var key;
      switch(typeof src) {
        case 'string':
        case 'number':
        case 'boolean':
          return String(src).toLowerCase().indexOf(value.toLowerCase()) > -1;
        case 'object':
          except = except || [];
          for(key in src) {
            if( src.hasOwnProperty(key) &&
                except.indexOf(key) < 0 &&
                contains(src[key], value, except)
            ) {
              return true;
            }
          }
        default:
          return false;
      }
      return false;
    }

    return function(data, filter, except) {
        return filter ? data.filter(function(item) {
          return contains(item, filter, except);
        }) : data.slice(0);
    };

如果我在控制器中工作,我有:

$filter('searchFilter')($scope.users, $scope.search, ['Id','ImgUrl']);

但现在我需要用ng-repeat查看它,我尝试这样做:

<li ng-repeat="node in users | searchFilter:users:search:['Id', 'ImgUrl']"></li>

但它工作不好......

如果我把调试器放在行return filter ? data.filter(function(item) {之前,我看到,我的filter不是我的搜索字,而是数组数据......

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用

<li ng-repeat="node in users | searchFilter:search:['Id', 'ImgUrl']"></li>

您不必以这种方式传递用户searchFilter:users:search:['Id', 'ImgUrl']"users将自动作为第一个参数传递。