Как работать с FormGroup.valueChanges с каналом pairwise ()? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть форма фильтров, которые запускают запросы по valueChanges. Чтобы избавиться от избыточных запросов, я использую pipe(pairwise()) для сопоставления предыдущего и следующего значений. Но я сталкиваюсь со странным поведением - в первом событии смены фильтра, не выдает:

  private createFilters(): void {
    this.filters = new FormGroup({
      from: new FormControl(new Date(moment().startOf('week').format())),
      to: new FormControl(new Date()),
      type: new FormControl(null),
      user: new FormControl(null),
      currency: new FormControl(null),
      strategy: new FormControl(null),
      instance: new FormControl(null),
      account: new FormControl(null),
      symbol: new FormControl(null),
    });
    this.filters.markAllAsTouched();
    this.filters.markAsDirty();
  }

  private subscribeFilters(): void {
    this.filters.valueChanges
      .pipe(pairwise())
      .subscribe(([prev, next]: [any, any]) => {
        if (JSON.stringify(prev) !== JSON.stringify(next)) {
          this.loadPage();
        }
      });
  }

Я проверяю проблему в JSON.stringify(prev) !== JSON.stringify(next), но событие просто не запускается.

Если я использую valueChanges без pairwise события срабатывания всегда:

  private subscribeFilters(): void {
    this.filters.valueChanges
      .subscribe(() => {
        this.loadPage();
      });
  }

Почему valueChanges с pairwise не запускает первое изменение фильтра только при втором изменении и как это исправить?

Angular 8 версия.

...