Пользовательский фильтр поиска для AngularJS

#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;
  };
});
 

Я надеюсь, что это поможет!