Тема подписки не срабатывает - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу передать данные из одного компонента в другой компонент, используя тему.Я использую Angular 7. Ниже мой сервис: -

public shareData = new Subject();
setShareDataOfReadingDetail(datatobeShared:any){
    console.log(datatobeShared)
    this.shareData.next(datatobeShared);
    this.shareData.complete()

  }

  getShareDataOfReadingDetail(){

    return this.shareData.asObservable();
  }

Мой первый компонент: -

shareDetail(detail){
    this.readingService.setShareDataOfReadingDetail(detail)
    this.router.navigate(['./tabs/tabs/readings/detail'])
  }

И компонент, в котором я получаю данные: -


  ngOnInit() {

    this.readingService.getShareDataOfReadingDetail().subscribe((data)=>{console.log(data)})

  }

Но подписка на тему вообще не срабатывает (т.е. она ничего не печатает в консоли)

1 Ответ

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

Когда вы создаете экземпляр второго компонента? До или после звонка на shareDetail? Я предполагаю, что это в результате навигации маршрутизатора. Если это так, вы отправляете значение и заполняете тему, прежде чем у компонента деталей появится возможность подписаться на него. Я бы отложил завершение Субъекта позже, возможно, в ngOnDestroy службы.

Я бы также рассмотрел возможность использования BehaviorSubject или ReplaySubject (для обеспечения кэширования значения).

...