Реализация фильтрации флажков для мат-карт - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь реализовать систему фильтров для списка объектов деревенских жителей, используя флажки. Сельские жители отображаются с использованием списка мат-сетка, плитки мат-сетка и мат-карт.

Вот это HTML:

<mat-grid-list [cols]="breakpoint" rowHeight="4:5" (window:resize)="onResize($event)">
      <mat-grid-tile *ngFor="let villager of pagedList">
        <mat-card class="clickable" routerLink="/detail/{{villager.id}}">
          <mat-card-header>
            <div mat-card-avatar class="example-header-image"></div>
            <mat-card-title>{{villager.name}}</mat-card-title>
            <mat-card-subtitle>"{{villager.quote}}"</mat-card-subtitle>
          </mat-card-header>
          <img src="{{villager.imageUrl}}" height="150" title="{{villager.name}}">
          <mat-card-actions>
          </mat-card-actions>
        </mat-card>
      </mat-grid-tile>
    </mat-grid-list>

А вот машинопись :

dataSource: MatTableDataSource<any>;
  filterCheckboxes: BehaviorSubject<string[]> = new BehaviorSubject<string[]>([]);

  villagers: Villager[];
  isLoading = false;

  @ViewChild(MatSort) sort: MatSort;
  @ViewChild(MatPaginator) paginator: MatPaginator;

  pagedList: Villager[] = [];
  breakpoint = 5;  // to adjust to screen
  // MatPaginator Inputs
  length = 0;
  pageSize = 15;  // displaying three cards each row
  pageSizeOptions: number[] = [15, 20, 50];
  pageEvent: any;

ngOnInit() {
    this.getVillagers();
  }

  getVillagers(): void {
    this.isLoading = true;
    this.villagerService.getVillagers().subscribe(villagers => {
      this.villagers = villagers;
      this.isLoading = false;
      this.dataSource = new MatTableDataSource(this.villagers);
      this.dataSource.sort = this.sort;
      this.dataSource.paginator = this.paginator;
      this.pagedList = this.villagers.slice(0, 15);
      this.length = this.villagers.length;
      this.dataSource.filterPredicate = (data: Villager, filter: string) => {
        return filter.split(',').every((item: string) => data.species.indexOf(item) !== -1);
      };
      this.filterCheckboxes.subscribe((newFilterValue: string[]) => {
        this.dataSource.filter = newFilterValue.join(',');
      });
    });

addFilter(change: MatCheckboxChange) {
    if (this.filterCheckboxes.value.some((a: string) => a === change.source.value)) {
      this.filterCheckboxes.next(this.filterCheckboxes.value.filter((a: string) => a !== change.source.value));
    } else {
      this.filterCheckboxes.next(this.filterCheckboxes.value.concat(change.source.value));
    }
  }

Я хотел бы установить флажок и отображать только жителей деревни, которые соответствуют хотя бы одному из фильтров. Мне удалось настроить фильтрацию на работу с использованием таблицы, но я не хочу отображать информацию. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...