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