Я пытаюсь отфильтровать результаты в 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;
}
}
}]);
получение '$ filter не определено' сейчас –
[this] (http://stackoverflow.com/questions/16706583/angularjs-filter-is-undefined-when-trying-to-get-filtered-data) является вероятный виновник, но диагностирование ошибки «не определено» без доступа к кодовой базе - это бесполезное упражнение. – gravityplanx
Да, действительно, это была проблема, ваш ответ привел меня к проблеме и как ее исправить, я отредактирую свой ОП и поставлю там рабочий код. Спасибо за помощь –