Angular 5过滤器自定义过滤器谓词

时间:2019-02-08 09:56:08

标签: angular angular-filters

我正在尝试按多列过滤记录,在过滤器输入框中键入内容时遇到一些错误。

在InputBox中键入内容时出现以下错误。

  

错误TypeError:无法读取未定义的属性'toString'       在MatTableDataSource.myFilterPredicate [作为filterPredicate](numbers.component.ts:191)       在评估时(table.es5.js:551)       在Array.filter()       在MatTableDataSource._filterData(table.es5.js:551)       在MapSubscriber.eval [作为项目](table.es5.js:512)       在MapSubscriber._next(map.js:79)       在MapSubscriber.Subscriber.next(Subscriber.js:95)       在CombineLatestSubscriber.notifyNext(combineLatest.js:133)       在InnerSubscriber._next(InnerSubscriber.js:25)       在InnerSubscriber.Subscriber.next(Subscriber.js:95)

2 个答案:

答案 0 :(得分:1)

问题出在这里:

 data.NUMBERRANGEEND.toString().trim().toLowerCase().indexOf(searchString.NUMBERRANGEEND.toLowerCase()) !== -1

toString()在前面需要一个参数-所以您需要调试data.NUMBERRANGEEND,因为它似乎不包含任何要转换的整数。

要确定问题出在哪里,您可以在后端处理对象属性时/在它们从前端发送到/请求之前调试它们。

答案 1 :(得分:1)

我遇到了同样的问题。 无法读取MatTableDataSource.myFilterPredicate上未定义的属性'toString'[作为filterPredicate] 。这意味着您的Mat表中可能有另一列完全为空,这就是为什么它无法读取空字符串的原因。 解决方案:尝试在空列中添加一些值或定义一个条件,该条件为:如果column为空,则不要将其视为null(将其像字符串一样处理)。