Нужно добавить некоторые условия, прежде чем сервис получит название RXJS - PullRequest
0 голосов
/ 19 февраля 2020

Я новичок в Angular, и я использую primeng Datatable для отображения сетки в моем приложении, теперь я также интегрировал нумерацию страниц для сетки, мне нужно добавить символ загрузки / счетчика в сетку, когда пользователь ищет или нажимает на номер страницы. Ниже для загрузки службы установлено значение true в начале метода, но служба не была вызвана в конкретном экземпляре, который позволяет всегда показывать загрузку, фактически я скрываю загрузку только тогда, когда получаю ответ. Поэтому есть ли способ установить загрузку в значение true в начале вызова API, чтобы я мог скрыться после получения ответа.

Заранее спасибо

private TransactionSearch: Subject<void> = new Subject();
loadTerritories(event:LazyLoadEvent)
{
    this.serviceloading = true;
    this.params = event.filters.TerritoryName;
    this.TransactionSearch.next();     
    this.TransactionSearch.pipe(
      distinctUntilChanged(),
      debounceTime(1000),
      switchMap(() => { 
            return this.TransService.getSalesTerritory(this.params);
      })).
      subscribe(res =>{ 
        this.totalcount = res.Total; 
        this.salesTerritoryList =  res.Data;  
        this.serviceloading = false;     
      });
  }

HTML Содержание

<p-table 
   #dt 
   [value]="salesTerritoryList" 
   [autoLayout]="true" 
   [totalRecords]="totalcount"
   [paginator]="true" 
   [rows]="15" 
   [lazy]="true"
   [loading]="serviceloading"
   (onLazyLoad)="loadSalesTerritories($event)"
>
</p-table>

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете добавить метчик к своей трубе под switchMap. Пожалуйста, смотрите ниже. Надеюсь, это поможет.

this.TransactionSearch.pipe(
  distinctUntilChanged(),
  debounceTime(1000),
  tap(() => { 
    this.serviceloading = true;
  }),
  switchMap(() => { return this.TransService.getSalesTerritory(this.params);})).
  subscribe(res =>{ 
    this.totalcount = res.Total; 
    this.salesTerritoryList =  res.Data;  
    this.serviceloading = false;     
  });
...