Как избежать двух запросов в компоненте? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть компонент, который загружает данные и отображает их:

ngOnInit() {
        this.getPage();

        this.eventsService.subjectFilterDistributionReset.subscribe((value) => {
            if (value) {
                this.paginationService.reset();
                this.loadPage();
            }
        });

        this.eventsService.subjectFilterDistribution.pipe(filter((filterUrl) => filterUrl)).subscribe((filterUrl) => {
            const page = 1;
            this.paginationService.setFilterBy(filterUrl);
            this.paginationService.setCurrentPage(page);
            this.paginationService.calculateOffsetLimit(page);
            this.loadPage();
        });

        this.eventsService.subjectSortingDistribution.pipe(filter(Boolean)).subscribe((sortedList: ListItem[]) => {
            this.paginationService.setSortBy(getSortingString(sortedList));
            this.loadPage();
        });
    }

Как видите, по умолчанию он вызывает this.getPage();:

public getPage(page: number = 1): void {
    this.loadDataRequest();
}

Также у него есть слушатель:

 this.eventsService.subjectFilterDistribution.pipe(filter((filterUrl) => filterUrl)).subscribe((filterUrl) => {})

Проблема в том, что когда я направляюсь к этому компоненту и отправляю сообщение this.eventsService.subjectFilterDistribution.

Он вызывает this.getPage();, потому что он находится в ngOnIinit.

Итак, как разделить загрузку по умолчанию и по событиям?

Проблема в том, что мне нужно вызвать метод this.loadPage(); только один раз.

  1. Когда компонент загружен
  2. Когда приходит тема события

1 Ответ

0 голосов
/ 15 июля 2020

Вы можете использовать методcommonLatest, перемещая logi c, который у вас есть в каждой отдельной подписке в операторе tap, потому что технически это побочные эффекты.

public filterDistributionReset =  
     this.eventsService.subjectFilterDistributionReset.pipe(
               filter(res => !!res),
               tap(_ => this.paginationService.reset()));

// Add also the other subjects


public combinedSubjects = combineLatest(
  filterDistributionReset,
  filterDistribution,
  sortingDistribution);


ngOnInit() {
 this.combinedSubjects.subscribe(_ => this.loadPage())
}


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