2016-02-19 4 views
2

Я пытаюсь отфильтровать результаты в ng-repeat, но с функцией «умного поиска», т.е. используя несколько ключевых слов для поиска. Коллекция представляет собой сложный массив объектов, содержащих объекты.AngularJS filter: Smart search

Согласно Angular Docs: $filter, вы можете использовать {$: "keyword"} с функцией фильтра для глубокого фильтра, но я не получил его на работу.

Отрывок:

.filter('smartsearch', function() { 
    return function (collection, keywords) { 
    if (!keywords) { 
     return collection; 
    } else { 
     keywords = keywords.split(" "); 
     _.each(keywords, function (word) { 
      collection = _.filter(collection, {$: word}); 
     }); 
     return collection; 
    } 
} 

кажется, возвращает пустой массив ([]) каждый раз, даже если я знаю, что я использую сопрягая ключевое слово

UPDATE

Понял работает благодаря @gravityplanx, указывающему мне в правильном направлении, ниже находится рабочее решение:

.filter('smartsearch', ['$filter', function ($filter) { 
     return function (collection, keywords) { 
      if (!keywords) { 
       return collection; 
      } else { 
       keywords = keywords.split(" "); 
       $.each(keywords, function (k, v) { 
        collection = $filter('filter')(collection, {$: v}); 
       }); 
       return collection; 
      } 
     } 
    }]); 

ответ

3

Вы используете метод фильтра подчеркивания, если хотите использовать Angular's.

Просто измените _.filter( на $filter(.

+0

получение '$ filter не определено' сейчас –

+0

[this] (http://stackoverflow.com/questions/16706583/angularjs-filter-is-undefined-when-trying-to-get-filtered-data) является вероятный виновник, но диагностирование ошибки «не определено» без доступа к кодовой базе - это бесполезное упражнение. – gravityplanx

+1

Да, действительно, это была проблема, ваш ответ привел меня к проблеме и как ее исправить, я отредактирую свой ОП и поставлю там рабочий код. Спасибо за помощь –