下拉列表中的搜索灵敏度 (ng-select, angular)
Search sensitivity in dropdown (ng-select, angular)
我正在使用 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'}
];
在 select 字段中,如果我键入 "MA, B",则该字段会过滤为 "MA, Boston",这是正确的。
但是,如果我键入 "MA Boston",该字段不会显示任何结果(许多用户可能会漏掉逗号)。
有没有办法让搜索功能忽略逗号,或者对逗号不太敏感?
这是上面示例的堆栈闪电战:
你可以有这样的功能:
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
一个快速的破解方法是用空字符串替换所有逗号。
首先,在您的 component.html 上,您需要使用自己的 custom search function 传递 searchFn
的输入 属性 绑定。
<ng-select
[items]="cities"
[searchFn]="customSearchFn"
bindLabel="name"
placeholder="Select city"
[(ngModel)]="selectedCity">
</ng-select>
然后,在您的 component.ts 上,您将使用以下方法定义 customSearchFn
。这是一个快速的 hack,但我所做的是将逗号替换为该特定对象的空字符串。例如MA,Boston将成为MA Boston。
customSearchFn(term: string, item) {
item.name = item.name.replace(',','');
term = term.toLocaleLowerCase();
return item.name.toLocaleLowerCase().indexOf(term) > -1;
}
我正在使用 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'}
];
在 select 字段中,如果我键入 "MA, B",则该字段会过滤为 "MA, Boston",这是正确的。
但是,如果我键入 "MA Boston",该字段不会显示任何结果(许多用户可能会漏掉逗号)。
有没有办法让搜索功能忽略逗号,或者对逗号不太敏感?
这是上面示例的堆栈闪电战:
你可以有这样的功能:
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
一个快速的破解方法是用空字符串替换所有逗号。
首先,在您的 component.html 上,您需要使用自己的 custom search function 传递 searchFn
的输入 属性 绑定。
<ng-select
[items]="cities"
[searchFn]="customSearchFn"
bindLabel="name"
placeholder="Select city"
[(ngModel)]="selectedCity">
</ng-select>
然后,在您的 component.ts 上,您将使用以下方法定义 customSearchFn
。这是一个快速的 hack,但我所做的是将逗号替换为该特定对象的空字符串。例如MA,Boston将成为MA Boston。
customSearchFn(term: string, item) {
item.name = item.name.replace(',','');
term = term.toLocaleLowerCase();
return item.name.toLocaleLowerCase().indexOf(term) > -1;
}