У меня на экране три компонента, один из которых - список, извлеченный из базы данных. Два ждут загрузки списка. Пользователь может переключаться между двумя другими компонентами, и список не нужно перезагружать.
Я использую сервис, чтобы сообщить двум компонентам, что загрузка списка завершена.
Когда список завершится, отобразится текущий просматриваемый компонент. Однако, если пользователь переключает представление после загрузки списка, новое представление все еще ожидает запуска наблюдаемого.
editor.service.ts:
...
private setBusReady = new Subject<boolean>();
...
getBusReady = this.setBusReady.asObservable();
...
busReady(values: boolean = false) {
this.setBusReady.next(values);
}
list.component.ts (устанавливает busReady в true после загрузки)
...
this.editorService.busReady(true);
...
viewer.component.ts (подписывается и ждет списка)
...
ngOnInit() {
...
this.editorService.getBusReady
.pipe(
takeUntil(this.unsubscribe)
)
.subscribe(res => {
if (res) {
this.loading = !res;
}
});
...
}
...
Представления с подпиской не имеют проблем при загрузке, но возникают при их переключении. Я думаю, что мне нужно переключиться на горячую наблюдаемую, но я не уверен. Я попытался сделать это с ConnectableObservable
, но это вызвало другие проблемы.