2013-08-05 4 views
1

У меня есть окно поиска, которое принимает ряд терминов, разделенных пробелами, которые разбиваются на массив, используя string.split(' '). Есть ли способ применить произвольное и потенциально большое количество фильтров из этого массива?AngularJS Фильтрация произвольным числом фильтров

+1

Итак, массив будет определять, какие фильтры применяются? Не могли бы вы попытаться предоставить более подробную информацию? Возможно, пример того, что вы пытаетесь получить? Вы еще что-нибудь пробовали? –

+0

Если у меня есть поисковый запрос «john jacob california», я бы хотел разбить эту строку на массив, содержащий «john», «jacob» и «california». Я хочу, чтобы каждый из этих элементов в массиве был фильтром. Но я не гарантирую, что у меня будет только три термина каждый раз, возможно, может быть какое-то количество терминов, и я хочу быть в состоянии поддержать это. Я определил десять фильтров, которые разделяются, но это не так динамично или масштабируемо, как хотелось бы. –

ответ

4

Подобно Тада, но на самом деле создать модуль пользовательского фильтра, а не загромождать контроллер. Вот как это работает для меня:

<input type="text" ng-model="query"> 
<li ng-repeat="object in objects | filterFunction:query"> {{object.state}} 

.filter('filterFunction', function() { 

    return function (objects, query) { 

    // objects is the array being filtered 
    // query is the value you passed in 

    array = query.split(' '); 

    for (var i = 0, len = objects.length; i < len; i++) { 
     // filter the crap out of these objects 
    } 

    } 
}); 
+0

Это сработало отлично. Спасибо. –

+0

Прямо на. Удачи, мой человек. –

0

Я думаю, что это, где вам нужно будет использовать функцию предиката фильтра вместо строки фильтра ...

как это (псевдокод):

<!--html--> 
<ul> 
    <li ng-repeat="object in objects | filter:filterFunction"> 
     {{object.description}} 
    </li> 
</ul> 

<!-- controller --> 
$scope.objects = [ your data here ]; 

$scope.filterFunction = function(searchVal) { 
    // write code that returns true or false depending 
    // on whether or not after you split searchVal any 
    // of the elements are in your data 
} 

Я не пробовал , но об этом говорится в документации.

-Thad

0

большой мульти-фильтр здесь:
https://gist.github.com/i8ramin/5825377

Угловая JS фильтр, который ведет себя так же, как встроенный фильтр один, но позволяет фильтровать с несколькими значениями , пространство разделено. Например, «большой оранжевый круглый»

Смежные вопросы