我想在我的表中搜索,但只能通过字符串搜索。
我使用过滤管:
export class FilterPipe implements PipeTransform {
transform(items: any[], field: string, value: string): any[] {
if (!items) {
return [];
}
if (!field || !value) {
return items;
}
return items.filter(singleItem => singleItem[field].toLowerCase().includes(value.toLowerCase()));
}
该项目是一个带数字的字段
<tr *ngFor="let todo of todos | filter: 'project' : searchString; let i = index">//It doesnt works.
我做错了什么?
已更新
transform(items: any[], field: string, value: string): any[] {
if (!items) {
return [];
}
if (!field || !value) {
return items;
}
return items.filter(singleItem => value.toLowerCase());
}
答案 0 :(得分:0)
您只能在toLowerCase()
上呼叫string
,而不能在number
上呼叫。
解决方案首先将其转换为字符串,如下所示:
(singleItem[field] + '').toLowerCase()
您的更新版本的过滤器中缺少一个布尔谓词,需要确定是否应过滤掉项目,但value.toLowerCase()
始终评估为true
非空value
的字符串,因此没有任何内容被过滤掉:
items.filter(singleItem => value.toLowerCase());
相反,你应该做类似的事情:
isIncluded(item: any, value: any, field: any): boolean {
// transform item to a string, in case it's of type number
const itemString = (item[field] + '').toLowerCase();
// transform value to a string ...
const valueString = (value + '').toLowerCase();
// decide, whether item should be filtered out
return itemString.includes(valueString);
}
transform(items: any[], field: string, value: string): any[] {
// (...)
return items.filter(item => this.isIncluded(item, value, field));
}