I\'m trying to write an angularjs custom filter that checks whether an array of countries contains a search string entered by the user.
The string can consist of on
Take a look at the Angular-UI-Bootstrap directive for typeahead
it does exactly what you want: http://angular-ui.github.io/bootstrap/#/typeahead
It is much simpler than that, use the String.indexOf()
function:
angular.forEach(items, function(item) {
if( item.label.indexOf(searchText) >= 0 ) filtered.push(item);
});
You may want to turn both strings .toLowerCase()
to do case-insensitive matching:
searchText = searchText.toLowerCase();
angular.forEach(items, function(item) {
if( item.label.toLowerCase().indexOf(searchText) >= 0 ) filtered.push(item);
});
angular.module('sgComponents').filter('listfilter',[ function () {
return function(items, searchText) {
var filtered = [];
var regex = new RegExp(".*" + searchItem + ".*", "ig");
angular.forEach(items, function(item) {
if(regex.test(item)){
filtered.push(item);
}
});
return filtered;
}
}]);