如何在 ngselect 中搜索值?

How to search value in ngselect?

从Api,我得到国家名称和代码如下

例如:-

  countryName        code
  -----------------------
  India              IND
  United States      USA
  Aruba              ABW

我想使用 ngSelect 下拉菜单,并希望在下拉菜单中显示国家名称(代码)等值。

例如:印度 (IND)

问题:- 我想连接 countryNamecode。并希望根据 国家名称和代码 过滤下拉值。 下面是我试过的代码。但是它不能正常工作

component.html

  <ng-select [items]="countries" bindLabel="description" bindValue="code"
           clearAllText="Clear" formControlName="countryCode"
          [searchFn]="customSearchFn">
      <ng-template ng-label-tmp let-item="item">
          <span >{{ item.countryName + ' (' + item.code + ')' }}</span>
      </ng-template>
      <ng-template ng-option-tmp let-item="item" let-search="searchTerm" let-index="index">
           <span >{{ item.countryName + ' (' + item.code + ')' }}</span>
      </ng-template>
   </ng-select>

component.ts

getCountry() {
this.lookupService.getCountry().subscribe(
  data => {
    this.countries = data;
  });
 }

customSearchFn

customSearchFn(term: string, item: Lookup) {
  term = term.toLocaleLowerCase();
  return item.code.toLocaleLowerCase().indexOf(term) > -1 || item.countryName.toLocaleLowerCase() === term;
   }

任何人都可以给我一个搜索的解决方案吗?

我把你的代码放到了 Stackblitz 中。它实际上几乎起作用了! 我只是对搜索功能做了一个小改动:

customSearchFn(term: string, item: any) {
    term = term.toLocaleLowerCase();
    return item.code.toLocaleLowerCase().indexOf(term) > -1 || 
           item.countryName.toLocaleLowerCase().indexOf(term) > -1;
}

(countryName 和代码都使用 indexOf 而不是 item.countryName.toLocaleLowerCase() === term

我删除的唯一另一项是 formControlName="countryCode",这给了我一个错误 "No provider for NgControl"。这个错误是有道理的,我还没有实现 NgControl。

现在,ABW 为您提供 Aruba,Aru 也为您提供 Aruba。 (这就是你想要的,对吧?)

我通过在我的 ts 中声明这个数组解决了这个问题:

countries = [
    { countryName: "India", code: "IND" },
    { countryName: "United States", code: "USA" },
    { countryName: "Aruba", code: "ABW" }];

我像这样将 ng-select 添加到我的 html 以及 class:

<ng-select
    bindLabel="description"
    class="searchable_select" 
    (change)="changed($event)">
    <ng-option *ngFor="let item of countries" [value]="item">
        {{ item.countryName + ' (' + item.code + ')' }}
    </ng-option>
</ng-select>

修改后的功能只是显示选中项的值。

最重要的是,SCSS class:

.searchable_select {
  .ng-input {
    display: flex;
    align-items: center;
  }
}

你也可以添加为CSS,当然:

.searchable_select .ng-input {
  display: flex;
  align-items: center;
}