Angularjs UI选择StartsWith或包含搜索

时间:2018-12-02 20:14:41

标签: javascript angularjs ui-select

我是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-Medical Doctor或用于此搜索。 在我的任务中,我应该使用开头的搜索或包含的代码。为此,我有两个过滤器: -开始于

.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 -Medical Doctor,但是当我看医生时,我也想看一看,但是现在我应该选择要使用的过滤器,因为在一起他们不起作用

0 个答案:

没有答案