如何在ng-select角度5的顶部对ng-select匹配的记录进行排序

时间:2018-08-13 08:59:04

标签: angular typescript angular5 angular-ngselect

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

请帮助我如何达到最终输出,我现在非常接近,只要我想知道如果国家/地区代码完全匹配,该如何排在记录的首位。

谢谢。

1 个答案:

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