Angular 使用主题的两个组件之间的角度通信

Angular 使用主题的两个组件之间的角度通信,angular,observable,subject-observer,Angular,Observable,Subject Observer,我有两个角度组件,需要在单击时将对象从一个组件传递到另一个组件。 我的第一个组件具有以下特性 showEventDetails(event: Event) { this.eventsService.sendEventDetail(event) } 这里是我的自定义模型对象: export class Event { id: number title: string description: string url: string date: string } 事

我有两个角度组件,需要在单击时将对象从一个组件传递到另一个组件。 我的第一个组件具有以下特性

showEventDetails(event: Event) {
    this.eventsService.sendEventDetail(event)
  }
这里是我的自定义模型对象:

export class Event {
  id: number
  title: string
  description: string
  url: string
  date: string
}
事件服务文件如下所示:

export class EventsService {
  eventDetailSubject = new Subject<any>();

  constructor() {
  }

  sendEventDetail(event: Event) {
    this.eventDetailSubject.next(event);
  }

  getEventDetail(): Observable<Event> {
    return this.eventDetailSubject.asObservable();
  }

但是,我注意到我无法接收第二个组件中的事件数据。我错过了什么?如果第二个组件不是第一个组件的子组件,是否有其他方法将此事件对象从一个组件传递到另一个组件?

RxJS
Subject
仅在订阅后收到值时才会发出。相反,您可以使用缓冲区大小1。它可以缓冲最后发出的值,并在订阅时立即发出

导出类事件服务{
eventDetailSubject=新的ReplaySubject(1);
...

RxJS
Subject
仅在订阅后收到值时才会发出。相反,您可以使用缓冲区大小1。它可以缓冲最后发出的值,并在订阅后立即发出

导出类事件服务{
eventDetailSubject=新的ReplaySubject(1);
...

在不应存在默认值的情况下,首选
ReplaySubject
,因为
null
可能导致意外错误在不应存在默认值的情况下,首选
ReplaySubject
,因为
null
可能导致意外错误
this.eventsService.eventDetailSubject.subscribe(event => {
      this.eventCal = event
      this.isLoading = false
    }, error2 => {
      this.isLoading = false
      this.hasError = true
    })