Я пытаюсь написать собственный фильтр angularjs, который проверяет, содержит ли массив стран строку поиска, введенную пользователем.
Строка может состоять из одной буквы (например, "E" ) или фрагмента n-букв (например, "lan" ) или целого слова (например, "Англия" ).
В каждом случае все страны, содержащие эту одну букву или этот фрагмент, должны быть возвращены, поэтому "E" вернет "Англию", "Эстония" и т.д., в то время как "lan" вернет "Англию", "Ирландию" и т.д..
Пока мой фильтр возвращает всю страну или отдельные буквы, но у меня возникают трудности со строковыми фрагментами:
-
Шаблон HTML:
<input ng-model="filter.text" type="search" placeholder="Filter..."/> <ul> <li ng-repeat="item in data | listfilter:filter.text"> </ul>
-
angularJS
angular.module('sgComponents').filter('listfilter',[ function () { return function(items, searchText) { var filtered = []; angular.forEach(items, function(item) { if(item.label === searchText) { // matches whole word, e.g. 'England' filtered.push(item); } var letters = item.label.split(''); _.each(letters, function(letter) { if (letter === searchText) { // matches single letter, e.g. 'E' console.log('pushing'); filtered.push(item); } }); // code to match letter fragments, e.g. 'lan' }); return filtered; }; }]);