【问题标题】:Subject subscribe is not triggering主题订阅未触发
【发布时间】:2019-09-18 23:59:35
【问题描述】:

我想使用 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)})

  }

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

【问题讨论】:

  • 你马上complete()你的SubjectsetShareDataOfReadingDetail()。如果我没记错的话,您需要使用 BehaviorSubject 来重播您的最后一个值。
  • @alexkucksdorf 我也使用过 BehaviourSubject。它也没有触发
  • @alexkucksdorf 使用 BehaviourSubject 并删除完整句子效果很好。非常感谢

标签: angular typescript rxjs angular7 subject


【解决方案1】:

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

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

【讨论】:

  • 我仅在 shareDetail 中实例化相同的内容。
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 2023-01-01
  • 2021-04-24
  • 1970-01-01
相关资源
最近更新 更多