#angularjs #angularjs-ng-repeat #angularjs-filter
#angularjs #angularjs-ng-repeat #angularjs-фильтр
Вопрос:
Предположим, у меня есть массив строк типа [«не волнуйся», «беспокойся», «Всегда будь счастлив и не волнуйся» ]
Когда я ищу беспокойство, используя фильтр поиска по умолчанию в ng-repeat, он выдает мне все три результата, независимо от позиции, в которой беспокойство находится в строке для поиска.
Я пытаюсь создать пользовательский фильтр поиска для ng-repeat таким образом, чтобы при поиске worry я получал результаты, отсортированные в соответствии с позицией «worry» в исходной строке.
Итак, при поиске слова «беспокойство» в приведенном выше массиве мой ожидаемый результат будет [«беспокойство», «не волнуйся», «Всегда будь счастлив и не волнуйся»].
Возможно ли это?
Комментарии:
1. конечно, просто создайте пользовательский фильтр, как указано в документации.
2. Пожалуйста, дайте мне знать, подходит ли мое решение! 🙂
3. @superpuccio Да, это работает, большое спасибо 🙂
4. Я рад, что помог вам!
Ответ №1:
Не могли бы вы попробовать это?
app.filter('wordsFilter', function() {
return function(items, word) {
var filtered = [];
angular.forEach(items, function(item) {
if(item.indexOf(word) !== -1){
filtered.push(item);
}
});
filtered.sort(function(a,b){
if(a.indexOf(word) < b.indexOf(word)) return -1;
else if(a.indexOf(word) > b.indexOf(word)) return 1;
else return 0;
});
return filtered;
};
});
Я надеюсь, что это поможет!