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

0

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

.filter('removeAcentos', function(){

    return function (source, item) {
    var re = new RegExp("" + item.toLowerCase() + "");
        angular.forEach(source, function(word){
            if(re.test(word.nomeCurso.toLowerCase()) === true){
                return true;
            }
        });
      //
        return false;
    };
})

И на вид:

<li ng-repeat="curso in ctrl.list| removeAcentos: ctrl.input ">
    ... <!-- display items from ctrl.list that match ctrl.input -->
</li>

Однако я не понимаю, почему он не работает. Я тестировал регулярное выражение, и функция фильтра возвращает true для правильных значений. Любые идеи?

1 ответ

2
Лучший ответ

Ваша функция не возвращает массив. Единственное, что возвращает функция, - false

forEach действительно не является надлежащим инструментом для работы. Попробуйте использовать Array.prototype.filter() и не забудьте вернуть новый массив:

.filter('removeAcentos', function(){

    return function (source, item) {
       if(!source){
          return false;
       }  
        var re = new RegExp("" + item.toLowerCase() + "");
       // return filtered array
       return source.filter( function(word){
            return re.test(word.nomeCurso.toLowerCase());
        });

    };
})
  • 0
    Приятно! Но я использую другую функцию фильтра, и я бы хотел, чтобы она потребляла меньше ресурсов процессора. Учитывая, что процессор потребляет много ресурсов, стоит ли использовать фильтр по сравнению с другими?
  • 0
    в любом случае создается цикл, ваш forEach ничего не делал для создания возвращаемого массива

Ещё вопросы

Сообщество Overcoder
Наверх
Меню