#angular #select #angular-ngselect
#angular #выберите #angular-ngselect
Вопрос:
Я использую ng-select со списком городов, как показано ниже:
cities = [
{id: 1, name: 'MA, Boston'},
{id: 2, name: 'FL, Miami'},
{id: 3, name: 'NY, New York', disabled: true},
{id: 4, name: 'CA, Los Angeles'},
{id: 5, name: 'TX, Dallas'}
];
В поле выбора, если я наберу «MA, B», тогда поле фильтруется на «MA, Boston», что правильно.
Но, если я наберу «MA Boston», поле не покажет результатов (многие пользователи могут пропустить запятые).
Есть ли способ заставить функцию поиска игнорировать запятые или она менее чувствительна к ним?
Вот stackblitz с примером выше:
Комментарии:
1. Вам нужно будет написать свою собственную функцию поиска и передать ее в ng-select
2. Вы просто хотите игнорировать запятые? Существуют ли какие-либо другие условия?
3. Спасибо! В идеале игнорируйте запятые, точки и тире
Ответ №1:
Быстрый способ сделать это — заменить все запятые пустой строкой.
Во-первых, на вашем component.html вам нужно будет передать привязку входного свойства для searchFn
с помощью вашей собственной пользовательской функции поиска.
<ng-select
[items]="cities"
[searchFn]="customSearchFn"
bindLabel="name"
placeholder="Select city"
[(ngModel)]="selectedCity">
</ng-select>
И затем, в вашем component.ts, вы определите customSearchFn
с помощью следующего метода. Это быстрый взлом, но то, что я сделал, это то, что я заменил запятые на пустую строку для этого конкретного объекта. Таким образом, например, MA, Boston станет MA Boston.
customSearchFn(term: string, item) {
item.name = item.name.replace(',','');
term = term.toLocaleLowerCase();
return item.name.toLocaleLowerCase().indexOf(term) > -1;
}
Комментарии:
1. Рад помочь! На самом деле вы можете следовать той же логике, чтобы «игнорировать» запятые и другие знаки!
Ответ №2:
У вас может быть функция, подобная:
searchMe(searchTerm: string, eachObject) {
let replacedKey = searchTerm.replace(/[,.-s]/g, '')
let newRegEx = new RegExp(replacedKey, 'gi');
let purgedName = eachObject.name.replace(/[,.-s]/g, '')
if (newRegEx.test(purgedName)) {
return true
}
return false
}
<ng-select [items]="cities"
bindLabel="name"
[searchFn]="searchMe"
placeholder="Select city"
[(ngModel)]="selectedCity">
</ng-select>
Смотрите здесь:https://stackblitz.com/edit/ng-select-ghnvko?file=app/app.component.ts
Комментарии:
1. Спасибо, хотя я пробовал с «MA Boston», и это оказалось безрезультатным
2. @user749798 Да, я не добавил флаг игнорирования регистра в регулярное выражение, вы можете проверить сейчас.