我正在尝试创建一个过滤器,以仅显示列表中与用户输入匹配的元素。
.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;
};
})
在 View 上:
<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());
});
};
})
关于javascript - 列表的自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107441/