主题订阅不会触发

问题描述 投票:0回答:1

我想使用Subject将数据从一个组件传递到另一个组件。我正在使用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)})

  }

但订阅主题根本没有触发(即它没有在控制台中打印任何东西)

angular typescript rxjs angular7 subject
1个回答
0
投票

什么时候实例化第二个组件?在分享ShareDetail之前或之后?我假设它是路由器导航的结果。如果是这样,您将在详细信息组件有机会订阅它之前发送值并完成主题。我会推迟完成主题,直到稍后,可能在服务的ngOnDestroy中。

我还会考虑使用BehaviorSubject或ReplaySubject(以提供值的缓存)。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.