Я использую BehaviourSubject из своего сервиса для получения всех данных из BackEnd, которые я подписываю в своем mainComponent, используя асинхронный канал.
Если я сейчас направлюсь к другому субкомпоненту, а затем нажму, например, кнопку возврата (использует функцию Location.back ()), чтобы вернуться к моему главному компоненту, он всегда выбирает все данные с новым запросом от BackEnd.
Я полагаю, что это происходит из-за использования асинхронного канала, поскольку он отписывает BehaviourSubject при выходе из mainComponent.
Нужно ли реализовать для этого некоторую стратегию кэширования или это можно решить с помощью ReplaySubject с размеромвсех данных, которые я получаю из mainComponent?
Ниже моего кода:
Сервис:
private subject$: BehaviorSubject<Setting[]> = new BehaviorSubject<Setting[]>([]);
fetchData() {
const fetch$: Observable <Setting[]> = this.getSettings().pipe(share());
fetch$.pipe(
map(allSettings => this.subject$.next(allSettings))
);
return fetch$;
}
MainComponent:
data: Observable<Setting[]>;
// Load Setting while starting
ngOnInit() {
this.data = this.apiService.fetchData();
}
MainComponent.html:
<tr *ngFor="let s of data | async">
<!--Do Something...-->
</tr>
Подкомпонент:
goBack(): void {
this.location.back();
}
Заранее большое спасибо:)