Comment puis-je écrire un angularjs filtre pour rechercher des fragments de chaîne/séquences de chaînes

Je suis en train d'écrire un angularjs filtre personnalisé qui vérifie si un éventail de pays contient une chaîne de recherche est entré par l'utilisateur.

La chaîne peut consister en une lettre (par exemple 'E'), ou un fragment de n-lettres (par exemple "lan") ou un mot (par exemple l'Angleterre).

Dans tous les cas, tous les pays contenant une lettre ou un fragment doit être retourné, de sorte que le " E " serait de retour 'Angleterre', 'Estonie", etc. tout en " lan " serait de retour 'Angleterre', 'Irlande', etc.

Jusqu'à présent, mon filtre retourne l'ensemble du pays ou d'une seule lettre, mais je vais avoir de la difficulté avec les fragments de chaîne:

  1. Modèle HTML:
    <input ng-model="filter.text" type="search" placeholder="Filter..."/>
    
    <ul>
       <li ng-repeat="item in data | listfilter:filter.text">
    </ul>
  2. 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;
    };
    }]);

OriginalL'auteur Tone | 2013-10-16