Фоновая загрузка данных и распознаватель в Angular - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть компонент с несколькими вкладками: tab1, tab2, tab3. Навигация между вкладками происходит по маршруту. tab1 является вкладкой по умолчанию, которая активна, когда пользователь заходит на страницу. tab3 требуется вызов API для получения данных для отображения. Я хочу загрузить эти данные в фоновом режиме в распознаватель WrapperComponent (обертка над этими вкладками), чтобы предотвратить длительную загрузку tab3. Также у меня есть распознаватель для tab3 для случаев, когда пользователь загружает страницу по URL, которая содержит tab3. Когда пользователь перемещается tab3, я хочу дождаться загрузки данных и больше не вызывать его. Итак, у меня есть сервис:

@Injectable({
  providedIn: 'root'
})
export class DataStorageService {
fetchData(requestId: string): void {
    this.data= this.reportsApi.getData(requestId).pipe(shareReplay(1));
  }

  getData(): Observable<data[]> {
    return this.data;
  }
}

Итак, в обработчике WrapperComponent я звоню DataStorageService.fetchData, чтобы начать загрузку данных в фоновом режиме.

А в резольвере tab3 я просто возвращаю this.data из сервиса:

resolve(route: ActivatedRouteSnapshot) {
    return this.DataStorageService.getData();
  }

Он отлично работает, кроме начальной загрузки данных. Поэтому при загрузке страницы на tab1 данные не начинают загружаться. Я исправил это с помощью дополнительной строки в fetchData:

 fetchData(requestId: string): void {
        this.data= this.reportsApi.getData(requestId).pipe(shareReplay(1));
        this.data.subscribe(v => v);
      }

Но это не кажется правильным. Я также пытался использовать BehaviorSubject, ReplaySubject таким образом:

fetchData(requestId: string): void {
  this.reportsApi.getData(requestId).subscribe(data => this.data = data)
}

И передать его asObservable для распознавателя, но он тоже не удался. Как я могу это реализовать?

1 Ответ

0 голосов
/ 23 апреля 2019

Вам нужно позвонить fetchData куда-нибудь, например, в getData.

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