Угловая наблюдаемая не получает начальное значение - PullRequest
0 голосов
/ 14 июня 2019

У меня на экране три компонента, один из которых - список, извлеченный из базы данных. Два ждут загрузки списка. Пользователь может переключаться между двумя другими компонентами, и список не нужно перезагружать.

Я использую сервис, чтобы сообщить двум компонентам, что загрузка списка завершена.

Когда список завершится, отобразится текущий просматриваемый компонент. Однако, если пользователь переключает представление после загрузки списка, новое представление все еще ожидает запуска наблюдаемого.

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, но это вызвало другие проблемы.

1 Ответ

2 голосов
/ 15 июня 2019

я думаю, что вы должны использовать BehaviourSubject , потому что Subject не содержит текущего значения при подписке, а срабатывает только на .next (момент загрузки ваших данных только), с другой стороны BehaviourSubject может содержать одно предыдущее значение и все последующие значения

...