带管道的Angular 4不敏感搜索结果

时间:2017-09-13 12:18:37

标签: angular typescript

您好我在angular4中创建了一个搜索管道,它从Json Data中过滤公司名称。搜索过滤器正在运行,但区分大小写,我如何从搜索过滤器中忽略区分大小写。我只提供与主题相关的代码。

我的管道代码 -

import { Pipe, PipeTransform } from '@angular/core';
import { JobsService } from '../services/jobs.service';

@Pipe({
    name: 'filter',
    pure: false
})
export class FilterPipe implements PipeTransform {
transform(items: any[], term): any {
    console.log('term', term);

    return term 
        ? items.filter(item => item.company.indexOf(term) != -1)
        : items;
    }
}

搜索框 -

<input type="text" [(ngModel)]="term" name="term">

数据 -

<div *ngFor="let joblist of jobList | filter: term">
    {{joblist.company}}
</div>

2 个答案:

答案 0 :(得分:1)

您可以使用String.protoype.search()方法而不是indexOf()方法来检查不区分大小写的正则表达式。

因此,您的return语句可能如下所示:

return term 
 ? items.filter(item => item.company.search(new RegExp(term, 'i')) !== -1)
 : items;

如果您的\变量中包含terms等特殊字符,那么您需要在过滤器中对此进行说明。上述方法应适用于普通的字母数字terms变量。

i中的new RegExp(term, 'i')说明了不区分大小写的terms模式。

以上代码将允许任何位置company的{​​{1}}值。如果您想要更严格的检查,可以在上面的代码段中将term构造函数替换为:RegExp。这些字符new RegExp('^' + terms + '$', 'i')&amp; ^指定“开始”&#39;并且&#39;结束&#39;分别是正则表达式。

有关searchregexp的详情。

答案 1 :(得分:0)

您应该将术语值过滤为:

...term.toLowerCase().company...