我有一个席子表和一个搜索字段,可以在其中过滤结果。
dataSource变量由嵌套对象填充,因此我必须设置filterPredicate
才能使过滤器在嵌套对象属性上工作。
一切正常,但是我还有一个用于日期的字段。
我检索的日期为moment.Moment
类型,看起来像这样:
date: Moment
_d: Sat Sep 22 2018 00:00:00 GMT+0200 {}
_i: "2018-9-22"
_isAMomentObject: true
_isUTC: false
_isValid: true
_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", _ordinal: "%d.", _dayOfMonthOrdinalParse: /\d{1,2}\./, …}
_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -2, charsLeftOver: 0, …}
__proto__: Object
排序在该日期进行,我可以对日期列进行排序而没有问题,但是当我输入过滤器时,我无法使用日期将其过滤掉,日期通过html这样发送:
{{element.date | date : "shortDate"}}
那么如何通过日期和日期管道中的日期显示来过滤日期呢?
谢谢
编辑:过滤器代码:
nestedFilterCheck(search, data, key): any {
if (typeof data[key] === "object") {
for (const k in data[key]) {
if (data[key][k] !== null) {
search = this.nestedFilterCheck(search, data[key], k);
}
}
} else {
search += data[key];
}
return search;
}
this.dataSource.filterPredicate = (data, filter: string) => {
const accumulator = (currentTerm, key) => {
return this.nestedFilterCheck(currentTerm, data, key);
};
const dataStr = Object.keys(data)
.reduce(accumulator, "")
.toLowerCase();
const transformedFilter = filter.trim().toLowerCase();
return dataStr.indexOf(transformedFilter) !== -1;
};
applyFilter(filterValue: string): void {
filterValue = filterValue.trim();
filterValue = filterValue.toLowerCase();
this.dataSource.filter = filterValue;
}
<input matInput #filter (keyup)="applyFilter($event.target.value)">