Подтвердить что ты не робот

RxJs получают значение от наблюдаемого

В компоненте:

singleEvent$: Observable<Event>;

В init, я получаю наблюдаемый

this.singleEvent$ = this._eventService.events$
  .map(function (events) {
    let eventObject = events.find(item => item.id === eventid);
    let eventClass: Event = new Event(eventObject);
    return eventClass;
  });

Как я могу взять текущее значение, например event.name?

4b9b3361

Ответ 1

Чтобы получить данные из наблюдаемой, вам необходимо подписаться:

this.singleEvents$.subscribe(event => this.event = event);

В шаблоне вы можете напрямую связать наблюдаемые объекты с помощью асинхронного канала:

{{singleEvents$ | async}}

Ответ 2

Чтобы добавить к ответу Гюнтера Цобауэра, BehaviorSubject может быть тем, что вы ищете, если вы хотите синхронно получить значение внутри вашего Observable.

BehaviorSubject - это Observable, у которого всегда есть значение, и вы можете вызвать myBehaviorSubject.getValue() или myBehaviorSubject.value, чтобы синхронно получить значение, которое BehaviorSubject в настоящее время содержит.

Поскольку он сам по себе также является наблюдаемым, вы все равно можете подписаться на BehaviorSubject, чтобы асинхронно реагировать на изменения в значении, которое он содержит (например, myBehaviorSubject.subscribe(event => { this.event = event })), и использовать асинхронный канал в шаблоне компонента (например, {{ myBehaviorSubject | async }}).

Вот несколько примеров использования вашего примера для создания объекта BehaviorSubject в вашем компоненте из данного сервиса:

@Component({
  //...
})
export class YourComponent implements OnInit {
  singleEvent$: BehaviorSubject<Event>;

  constructor(private eventService: EventService){}

  ngOnInit(){
    const eventid = 'id'; // <-- actual id could go here
    this.eventService.events$
      .pipe(
        map(events => {
          let eventObject = events.find(item => item.id === eventid);
          let eventClass: Event = new Event(eventObject);
          return eventClass;
        })
      )
      .subscribe(event => {
        if(!this.singleEvent$){
          this.singleEvent$ = new BehaviorSubject(event);
        } else {
          this.singleEvent$.next(event);
        }
      });
  }
}