0

2 つの角度コンポーネントがあり、クリックするだけで 1 つのコンポーネントから別のコンポーネントにオブジェクトを渡す必要があります。私の最初のコンポーネントには次のものがあります

showEventDetails(event: Event) {
    this.eventsService.sendEventDetail(event)
  }

ここで 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();
  }

私の 2 番目のコンポーネントには、イベント データを受け取るための次のコードがあります。

this.eventsService.eventDetailSubject.subscribe(event => {
      this.eventCal = event
      this.isLoading = false
    }, error2 => {
      this.isLoading = false
      this.hasError = true
    })

しかし、2 番目のコンポーネントでイベント データを受信できないことに気付きました。ここで何が欠けていますか?2 番目のコンポーネントが最初のコンポーネントの子ではない場合に、あるコンポーネントから別のコンポーネントにこのイベント オブジェクトを渡す方法は他にありますか?

4

1 に答える 1

2

RxJSは、サブスクリプションSubjectに値を受け取った場合にのみ発行します。代わりに、バッファ サイズ 1 を使用できます。最後に発行された値をバッファリングし、サブスクリプション時にすぐに発行できます。ReplaySubject

export class EventsService {
  eventDetailSubject = new ReplaySubject<any>(1);
  ...
于 2020-06-23T20:49:20.530 に答える