использовать фильтрацию по динамическим именам столбцов в ngx-datatable - PullRequest
0 голосов
/ 04 декабря 2018

Я использую Angular 6 и ngx-datatable для отображения данных в таблице.

Если столбцы известны ранее, фильтр работает как

updateFilter(event) {
    const val = event.target.value.toLowerCase();
    // filter our data
    // update the rows
    this.rows = this.temp.filter(function (d) {
      if (d.user.name.toLowerCase().indexOf(val) !== -1 || !val) {
        return d.user.name.toLowerCase().indexOf(val) !== 1 || !val;
      } else if (d.user.email.toLowerCase().indexOf(val) !== -1 || !val) {
        return d.user.email.toLowerCase().indexOf(val) !== -1 || !val;
      }
    });
  }

Но в моем случае столбцы динамические и изменяются вместе с данными.

Вот как я извлекаю имя столбца из данных

 private _processData() {
    const columns = Object.keys(this.data.data[0]);

    this.columnsList = columns;

    for (const c of columns) {
      this.columns.push({
        prop: c,
        name: c.toUpperCase()
      });
    }

    this.rows = this.data.data;
    this.temp = this.data.data;
  }

Теперь я хочу изменить updateFilter() функция для использования с динамическим списком столбцов columnsList .Это то, что я сделал.

  updateFilter(event) {
    const val = event.target.value.toLowerCase();
    const columns = this.columnsList;
    // filter our data
    // update the rows
    this.rows = this.temp.filter(function (d) {
      for (const c of columns) {
        if (d[c].toLowerCase().indexOf(val) !== -1 || !val) {
          return d[c].toLowerCase.indexOf(val) !== -1 || !val;
        }
      }
    });
  }

Но при поиске данных выдается ошибка типа

ERROR TypeError: "d[c].toLowerCase.indexOf is not a function"

Как использовать динамические имена столбцов для генерации updateFilter() метод для эффективной работы.

...