Angular Material表,如何过滤moment类型的Date

时间:2018-11-06 09:20:19

标签: javascript angular date angular-material momentjs

我有一个席子表和一个搜索字段,可以在其中过滤结果。

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)">

0 个答案:

没有答案