1

После реализации пагинации моих нг-повтор списка (Update pagination in AngularJS after filtering)Пользовательского фильтра в AngularJS после добавления пагинации

<li ng-repeat="data in filtered = (list | filter:search) ... > 

теперь у меня есть проблемы с моим настраиваемого фильтром

<li ng-repeat="data in filtered = (list | filter:search) | customFilter:search ... > 

Мне нужна этот фильтр для поиска по нескольким языкам (выберите два или более языков). Если вы меняете данные в формате filter = (list | filter: search) с данные в списке, вы увидите, что он работает. Но мне нужно отфильтровано для моей разбивки на страницы.

jsFiddle: http://jsfiddle.net/StinsonMaster/SuEX6/4/ (на основе the fiddle from the previous thread)

ответ

0

Я думаю, что неправильно понял ваш оригинальный вопрос.

Я переписал ваш собственный фильтр. Это не совсем объективно ориентированное, но с небольшим касанием вверх оно может быть гораздо более расширяемым. В основном вам просто нужно что-то более содержательное, чем базовый угловой фильтр.

app.filter("customFilter", function() { 
    return function(input, search) { 
     if(search && search != undefined) { 
      var _toRet = new Array(); 
      for(var i in search) { 
       for(var k in input) { 
        if(search.indexOf(input[k].language) != -1 && _toRet.indexOf(input[k]) == -1) { 
         _toRet.push(input[k]); 
        } 
       } 
      } 
      return _toRet; 
     } else { 
      return input; 
     } 
    }; 
}); 

Также обратите внимание на изменения в синтаксисе ngRepeat.

ng-repeat="data in filtered = list | filter:search.name | customFilter:search.language | startFrom:(currentPage-1)*entryLimit | limitTo:entryLimit" 

http://jsfiddle.net/doublekid/5Bs3h/

+0

Большое спасибо! – StinsonMaster

+0

Выглядит многообещающе. Вот обновленный скрипт с действительными ссылками js (оригинал вызывал ошибку). http://jsfiddle.net/YaQK2/ – mg1075

0

Я хотел бы предложить, вместо того, чтобы использовать выражение в ваших нг-повторе директивы, установите нг повтора равным метод на constroller в списке, которая возвращает подмножество или которые вы ищете. Например:

// In your controller 

     $scope.filteredList = function() { 
      return $filter('filter')($scope.list,{'language':search.language}); 
     } 

// And in your ng-repeat 

     ng-repeat="(key,val) in filteredList()" 

Надеюсь, это поможет!

+0

Хм, ладно ... Можете ли вы раскошелиться мою скрипку? Я попробовал ваш код, но не понял, как его использовать. – StinsonMaster