0

我在我的 Angular 应用程序中使用 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);
}

请帮助我如何达到我的最终输出,我现在非常接近,只是我想知道如果国家代码完全匹配,如何排序以达到最高记录。

提前致谢。

4

1 回答 1

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;
      
    }

于 2018-08-13T09:34:02.733 回答