data-filter.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'dataFilter'
})
export class DataFilterPipe implements PipeTransform {
transform(array: any[], query: string): any {
if (!query || query === '') {
return array;
}
let filtered = [];
array.forEach(function (element) {
let isAdded = false;
Object.keys(element).forEach(function (key, index) {
if (!isAdded && element[key].toString().toLowerCase().includes(query.toLowerCase())) {
filtered.push(element);
isAdded = true;
}
});
});
return filtered;
}
}
在.html中
<table class="bordered table-bordered" [mfData]="users | dataFilter : filterQuery" #mf="mfDataTable"
发布于 2018-01-12 13:17:56
表示某个关键element[key]
的值为undefined
。您需要再添加一项检查,以验证真实性
!isAdded && element[key] && element[key].toString()...
// ---------^^^^^^^^^^^^---------------------------
发布于 2018-01-12 13:23:31
我在代码中看到了两件事:
1-每当您使用对象键时,请确保使用hasOwnProperty
测试预期的键(除非您不想这样做
2-在你发布的代码中只有一次toString()
用法,从错误中,你确切地知道它是什么,不能在undefined
上调用函数,因此element[key]
是未定义的。注意,键存在但值不存在,你可以用很多方法来解决这个问题,就像@sauren建议的那样,你可以在if语句中添加它,或者确保在调用函数之前将它设置为空字符串,或者任何你认为合适的东西。但是想法是一样的,在使用它来调用函数之前,请确保该值没有未定义。
https://stackoverflow.com/questions/48227048
复制相似问题