Как можно отфильтровать эту таблицу на основе логического значения столбца? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь отфильтровать таблицу в зависимости от того, активны ли мои "проекты" или нет. В настоящее время у меня есть таблица, где «активный» - это столбец, и он будет отображать значение «истина» или «ложь» в зависимости от состояния проекта. Я хотел бы иметь возможность фильтровать мою таблицу на основе этого логического значения.

Таким образом, в настоящее время я использую меню выбора, которое будет возвращать либо true, либо false в зависимости от выбора. Из того, что я пытался, таблица не будет фильтровать по логическим значениям, только по строкам. Итак, у меня есть отфильтрованный предикат, который пытается принудительно применить фильтрацию только для моего активного столбца, однако в настоящее время он не работает должным образом.

//.ts file
dataSource: MatTableDataSource<OrderTemplateInterfaceWithId> = new MatTableDataSource([]);
  displayedColumns = [
    'dayOfWeek',
    'startTime',
    'endTime',
    'technician',
    'frequency',
    'startDate',
    'endDate',
    'active',
    'actions'
  ];

ngOnInit() {
    this.dataSource.filterPredicate = (data: OrderTemplateInterfaceWithId, filter: string) => {
      return data.active === (filter === "true") || data.active === (filter === "false");
    };
  }

applyFilter(filterValue: string) {
    console.log(this.dataSource);
    this.dataSource.filter = filterValue;
  }

//.html file
<mat-form-field>
<mat-select (selectionChange)="applyFilter($event.value)">
  <mat-option value='true'>Active</mat-option>
  <mat-option value='false'>InActive</mat-option>
</mat-select>
</mat-form-field>

Таким образом, я ожидаю, что результаты отфильтруют мою таблицу по активному столбцу на основе моего меню выбора. Любая помощь будет принята с благодарностью, спасибо!

1 Ответ

0 голосов
/ 29 мая 2019

Итак, я понял, что мой фильтр FilterPredicate должен быть внутри моего applyFilter, прямо перед тем, как я сделал настоящий фильтр.Так что мой applyFilter выглядел так:

applyFilter(filterValue: string) {
    if(filterValue === 'all') {
      this.dataSource.filterPredicate = function(data, filter): boolean {
        return String(data.active).includes('true')
          || String(data.active).includes('false');
      };
    }
    else {
      this.dataSource.filterPredicate = function(data, filter): boolean {
        return String(data.active).includes(filter);
      };
    }
    this.dataSource.filter = filterValue;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...