byCoder
byCoder

Reputation: 9184

AngularJS: custom filter with multiple params in view

I have suchc 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);
    };

and if i'm working in controller i have:

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

but now i need to put it on view with ng-repeat, and i try so:

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

but it work bad...

if i put debugger before line return filter ? data.filter(function(item) { i see, that my filter is not my search word, by array-data...

how to solve this?

Upvotes: 0

Views: 33

Answers (1)

Mudasser Ajaz
Mudasser Ajaz

Reputation: 6257

Use

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

You dont have to pass users this way searchFilter:users:search:['Id', 'ImgUrl']".users will automatically will be passed as first parameter.

Upvotes: 1

Related Questions