我在角度应用程序中使用ng-select自动完成功能来投标国家名称和国家/地区代码。示例-如果我在搜索框中输入结果,则将是
印度- IN
印度尼西亚-ID
在加载我检索到的所有带有国家名称的国家代码列表时,将使用ng-select的自定义搜索功能来完成。
请在下面检查我的代码-
<ng-select placeholder="Select Countries" class="custom"
[items]="countryList | async"
[multiple]="true"
bindLabel="countryname"
[searchFn]="searchcountry"
(change)="onChange($event)"
[(ngModel)]="selectedCountry">
<ng-template ng-label-tmp let-item="item" let-clear="clear">
<span class="ng-value-label">{{item.countryname}}</span>
<span class="ng-value-icon right" (click)="clear(item)" aria-hidden="true">×</span>
</ng-template>
<ng-template ng-option-tmp let-item="item" let-index="index" let-search="searchTerm">
<span [ngOptionHighlight]="search"> {{item.countryname}} - {{item.countrycode}} </span>
</ng-template>
ngOnInit() {
this.countryList = this.caseService.GetCountryList();
}
searchcountry(term: string, item: any) {
term = term.toLocaleLowerCase();
return item.countrycode.toLocaleLowerCase().indexOf(term) > -1 || item.countryname.toLocaleLowerCase().includes(term);
}
请帮助我如何达到最终输出,我现在非常接近,只要我想知道如果国家/地区代码完全匹配,该如何排在记录的首位。
谢谢。
答案 0 :(得分:0)
下面的代码会将您的JSON对象转换为纯文本,然后检查其中的搜索词。我主要使用此解决方案作为管道,在管道中我传递对象数组并搜索其工作方式(如魅力)。
searchcountry(term: string, item: any) {
const REGEXP=/("([a-z]+)":)|\[|\]|\{|\}/g;
term = term.toLocaleLowerCase();
return term ? item.filter(itm=>{
let str=JSON.stringify(itm).tolowerCase();
str=str.replace(REGEXP,'');
return str.include(term);
}): item;
}