Функция динамического фильтра для ngFor - PullRequest
0 голосов
/ 16 мая 2019

Я использую Angular 7 с Typescript и пытаюсь создать фильтр даты для списка. Список может быть очень большим. Я много читал, и я нашел решение трубы. Проблема в том, что когда я меняю аргументы фильтра, ngFor не обновляется, а также я прочитал, что Pipe не подходит для очень длинных списков.

Мой HTML:

<tr *ngFor="let x of sessions | callback: filterByDate" (click)="view(x)">

Мой тс:

private filterByDate = (session: Session) => {
    if (this.fromDateFilter && this.fromDateFilter > session.Date) {
      return false;
    }
    if (this.toDateFilter && this.toDateFilter < session.Date) {
      return false;
    }
    return true;
  }

Класс трубы:

import { PipeTransform, Pipe } from '@angular/core';

@Pipe({
    name: 'callback',
    pure: false
})
export class CallbackPipe implements PipeTransform {
    transform(items: any[], callback: (item: any) => boolean): any {
        if (!items || !callback) {
            return items;
        }
        return items.filter(item => callback(item));
    }
}

У меня есть угловой DatePicker, который изменяет параметры this.fromDateFilter и this.toDateFilter. В угловых 1.6 это было очень легко. Каждый раз, когда я меняю функцию фильтра, она выполнялась. Здесь ничего не происходит.

Спасибо!

...