How can I write an angularjs filter to search for string fragments/sequences of strings
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; }}]);
Take a look at the Angular-UI-Bootstrap directive for typeahead
it does exactly what you want: http://angular-ui.github.io/bootstrap/#/typeahead