【问题标题】:How to make my 'angular search list pipe' Case-Insensitive?如何使我的“角度搜索列表管道”不区分大小写?
【发布时间】:2019-05-28 20:30:17
【问题描述】:

我有一个工作列表和搜索框。在搜索框中,用户输入职位名称来搜索职位。我制作了一个角管来根据用户在搜索框中键入的字母来搜索工作,这意味着工作列表正在更新,只有那些由用户键入字母的项目 它工作得很好,但它区分大小写,我想让它区分大小写。 我已经制作了区分大小写的基于“包含”的角管道。我尝试在小写的基础上制作搜索关键字,但没有奏效。

    **TS.file**
    @Pipe({ name: 'filterByName' })
    export class filterNames implements PipeTransform {
      transform(listOfNames: string[], nameToFilter: string, ): string[] {
        var upperLetter=nameToFilter.toUpperCase();
        var smallLetter=nameToFilter.toLowerCase();
        if (!listOfNames) return null;
        if (!nameToFilter) return listOfNames;
        return listOfNames.filter(n =>
   ((n.indexOf(smallLetter) >= 0)||(n.indexOf(upperLetter) >= 0)) 
        );
      }
    }

    **Html file:**
    <mat-form-field class="example-full-width">
      <input [(ngModel)]="filterName" matInput placeholder="Find jobs">
    <mat-form-field

    <mat-nav-list *ngIf ="showlist"  #jobs>
      <mat-list-item *ngFor="let response of JOBS| filterByName:filterName">
        {{response}} 
      </mat-list-item>
    </mat-nav-list>

我希望如果用户在搜索框中键入“A”,列表应该更新为列表项“A”和“a”。现在在这种情况下,只有“A”项正在更新。 请让我知道是否需要更多输入。 提前致谢。

【问题讨论】:

  • 链接管道是否无济于事angular.io/guide/pipes#chaining-pipes。即管道作业到大写或小写然后管道到你的管道?
  • 否 @AndrewAllen ,如果我应用它,它将改变来自 API 的数据的大小写,我需要在 UI 中以与来自 API 的完全相同的格式显示数据。跨度>
  • 我更新了我的 ts 文件,但仍然犯了一些错误,有什么帮助吗?

标签: filter pipe angular7 case-insensitive


【解决方案1】:

这可以通过强制listOfNames(在过滤器内)和nameToFilter 中的名称为大写来完成。

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'filterByName'
})
export class FilterNamesPipe implements PipeTransform {

  transform(listOfNames: string[], nameToFilter: string=''): string[] {
        var upperLetter = nameToFilter.toUpperCase();
        if (!listOfNames) return null;
        // console.log('listOfNames', listOfNames, 'nameToFilter', nameToFilter, 'upperLetter', upperLetter );
        if (!nameToFilter || nameToFilter === '') return listOfNames;
        return listOfNames.filter(name => 
          name.toUpperCase().startsWith(upperLetter)
        )
  }

}

Stackblitz 示例 - https://stackblitz.com/edit/angular-so-56307438

【讨论】:

  • 没问题@ArchitGoyal。请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
  • 完成@Andrew Allen。
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多