Выделите пути, соответствующие шаблонам (Angular 7)

У меня есть список путей, которые могут содержать подстановочные знаки. Каким будет лучший подход для фильтрации/выделения путей, соответствующих путям, содержащим подстановочные знаки? Так что путь '/server/test/block' будет помечен, когда у вас также есть путь '/server/*' f.ex. До сих пор я пробовал вкладывать .filter с .contains и проверять, больше ли массив, чем 1. Однако это дало бы только точные совпадения, и я не нашел хорошего способа добавить один и тот же класс к тем, которые соответствуют друг другу .

Чтобы запустить эту функцию, я протестировал селектор [innerHTML] на своем мат-ячейке, но функция запускалась много раз. Я также протестировал использование селектора [class.someName] на интервале внутри ячейки мата, но это также вызывало функцию много-много раз. Любые указатели, в каком направлении я должен смотреть, будут оценены.

Данные показаны с использованием таблицы материалов.


person Lars Rødal    schedule 19.11.2018    source источник


Ответы (1)


В итоге я добавил в набор данных логическое значение «matchesPattern». Я нашел модуль npm с именем minimatch, который выдает логическое значение в зависимости от соответствия шаблону или нет.

import minimatch from 'minimatch';

markMatchingPaths() {
  this.dataSource.data.map(p => p.matchesPattern = false);
  const wildcards = this.currentDataSource.data.filter(w => w.path.includes('*'));

  wildcards.forEach(w => {
    this.dataSource.data.forEach(p => {
      const res = minimatch(p.path, w.path);
      if (res) {
        p.matchesPattern = true;
      }
    });
  });
}

Я использовал указанное логическое значение с [class.someName], чтобы добавить класс в диапазон, окружающий пути. Теперь они выделены другим цветом.

person Lars Rødal    schedule 21.11.2018