15

国の配列にユーザーが入力した検索文字列が含まれているかどうかを確認する angularjs カスタム フィルターを作成しようとしています。

文字列は、1 文字 (例: 'E')、n 文字の断片 (例: 'lan')、または単語全体 (例: 'England') で構成できます。

いずれの場合も、その 1 文字またはその断片を含むすべての国を返す必要があるため、'E' は 'England'、'Estonia' などを返し、'lan' は 'England'、'Ireland' などを返します。

これまでのところ、フィルターは国全体または単一の文字を返しますが、文字列の断片に問題があります:

  1. 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;
    };
    }]);
    
4

3 に答える 3

7
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;
    }
}]);
于 2013-10-16T14:07:35.620 に答える
0

Angular-UI-Bootstrap ディレクティブをtypeahead見てください。

于 2013-10-16T14:06:10.127 に答える