您好我在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>
答案 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;分别是正则表达式。
答案 1 :(得分:0)
您应该将术语值过滤为:
...term.toLowerCase().company...