У меня есть форма фильтров, которые запускают запросы по 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 версия.