我想使用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)})
}
但订阅主题根本没有触发(即它没有在控制台中打印任何东西)
什么时候实例化第二个组件?在分享ShareDetail之前或之后?我假设它是路由器导航的结果。如果是这样,您将在详细信息组件有机会订阅它之前发送值并完成主题。我会推迟完成主题,直到稍后,可能在服务的ngOnDestroy中。
我还会考虑使用BehaviorSubject或ReplaySubject(以提供值的缓存)。