Я новичок в 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-медицинский доктор, но когда я ставлю врача, я также хочучтобы увидеть это, но теперь я должен выбрать, какой фильтр использовать, потому что вместе они не работают