带有角度材料表的多文本搜索

时间:2020-01-31 16:29:16

标签: angular html-table angular-material

当前搜索正常。但是我对搜索有特殊要求。

STACKBLITZ

假设我需要搜索第一行Hydrogen Lithium,用户应该可以输入以下内容:

*Hy*Li,我应该得到输出Hydrogen Lithium

我该如何实现?我需要将*分解成array,然后在拆分*

之后,根据所有搜索项进行搜索。

1 个答案:

答案 0 :(得分:2)

您将需要修改数据源的filter predicate

根据您的搜索要求here从Stackblitz派生的示例。

特别是:

constructor(private dialog: MatDialog) {
    this.dataSource.filterPredicate =
        (data: Element, filter: string) => {
            const searchArray = filter.split("*");
            let filterMatch = true;
            let prevIndex = 0;
            searchArray.forEach(subString => {
                const strIndex = data.name.toLowerCase().indexOf(subString.toLowerCase());
                if (strIndex === -1 || strIndex < prevIndex) {
                    filterMatch = false;
                } else {
                    prevIndex = strIndex;
                }
            });
            return filterMatch;
        };
}

(抱歉,这很冗长-一会儿我会评论的!)