Я пытаюсь сделать фильтр только для отображения элементов в списке, который соответствует пользовательскому вводу.
.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 для правильных значений. Любые идеи?
Ваша функция не возвращает массив. Единственное, что возвращает функция, - 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());
});
};
})