Многотекстовый поиск с таблицей материалов angular - PullRequest
3 голосов
/ 31 января 2020

Поиск в настоящее время работает нормально. Но у меня есть конкретное c требование для поиска.

STACKBLITZ

Допустим, мне нужно найти первую строку Hydrogen Lithium, пользователь должен иметь возможность ввести следующее:

*Hy*Li и я должен получить вывод Hydrogen Lithium

Как мне этого добиться? Мне нужно разбить * на array и получить результаты поиска на основе всех элементов поиска после разбиения *

1 Ответ

2 голосов
/ 31 января 2020

Вам нужно будет изменить предикат фильтра вашего источника данных.

Пример, полученный из вашего 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;
        };
}

(Извините, это довольно многословно - рассмотрим, когда у меня появится момент!)

...