Angularjs UI Выбрать Начинается с или Содержит поиск - PullRequest
0 голосов
/ 02 декабря 2018

Я новичок в AngularJS и у меня возникли проблемы с фильтрами.У меня есть массив providerTitles с такими полями:

{group_id: 'doctors', group: 'Doctors', key: 'MD', label: 'MD', fullLabel: 'MD -Medical Doctor'}

На мой взгляд, я использую директиву AngularJS select ui-select

 <ui-select ng-model="model.doctorInfo.doctor_title" name="doctor_title" required>
                            <ui-select-match placeholder="Select a provider title" allow-clear="true">
                                {{$select.selected.fullLabel}}
                            </ui-select-match>
                            <ui-select-choices group-by="'group'" repeat="title.key as title in providerTitles | propsFilter: {fullLabel: $select.search}" disable-animate>
                                <span ng-bind-html="title.fullLabel | highlight: $select.search"></span>
                            </ui-select-choices>
                        </ui-select>

Я могу выбрать провайдера враскрывающийся список: MD - Врач или используйте для этого поиска .В моей задаче я должен использовать начинается с поиска или содержит .У меня для этого есть два фильтра: - начинается с

.filter('startsWith', function () {
            return function (items, letters) {
                var filtered =  [];
                var lettersMatch = new RegExp(letters, 'i');
                for(var i = 0; i < items.length; i++){
                    var item = items[i];
                    if(lettersMatch.test(item.key.substring(0, letters.length))){
                        filtered.push(item);
                    }
                }
                return filtered;
            };
        });

и еще один propsFilter

.filter('propsFilter', function () {
            return function(items, props) {
                var out = [];

                if (_.isArray(items)) {
                    items.forEach(function(item) {
                        var itemMatches = false;

                        var keys = Object.keys(props);
                        for (var i = 0; i < keys.length; i++) {
                            var prop = keys[i];
                            var text = props[prop] && props[prop].toString().toLowerCase();
                            var lettersMatch = new RegExp(text, 'i');
                            if(lettersMatch.test(item[prop].substring(0, text.length))){
                                itemMatches = true;
                                break;
                            }
                            if (item[prop] && item[prop].toString().toLowerCase().indexOf(text) !== -1) {
                                itemMatches = true;
                                break;
                            }
                        }

                        if (itemMatches) {
                            out.push(item);
                        }
                    });
                } else {
                    // Let the output be the input untouched
                    out = items;
                }

                return out;
            };
        })

Проблема в том, что я надеваюНе знаю, как связать их вместе, чтобы они работали.

Когда я ставлю MD , я хочу видеть - MD-медицинский доктор, но когда я ставлю врача, я также хочучтобы увидеть это, но теперь я должен выбрать, какой фильтр использовать, потому что вместе они не работают

...