typescript - RxJs få verdi fra observable


I komponent :

singleEvent$: Observable<Event>;

Ved init får jeg observerbar

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

Hvordan kan jeg ta den nåværende verdien som event.name ?

Svar #1

For å hente data fra et observabelt, må du abonnere:

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

I malen kan du binde direkte til observables ved å bruke async-pipen:

{{singleEvents$ | async}}

Svar #2

For å legge til Günter Zöbauers svar, kan et BehaviorSubject være det du leter etter hvis du ønsker å få verdien inne i din Observable synkront.

Et BehaviorSubject er et Observable som alltid har en verdi, og du kan kalle myBehaviorSubject.getValue() eller myBehaviorSubject.value for å synkront hente verdien BehaviorSubject for øyeblikket holder.

Siden det i seg selv også er en observable, kan du fortsatt abonnere på BehaviorSubject for å asynkront reagere på endringer i verdien den holder (f.eks. myBehaviorSubject.subscribe(event => { this.event=event })) og bruke async-pipen i komponentens mal (f.eks. {{ myBehaviorSubject | async }}).

Her er noen eksempler på bruk for å matche ditt gitte eksempel for å opprette en BehaviorSubject i komponenten din fra den gitte tjenesten:

@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);
        }
      });
  }
}

Svar #3

Du kan bruke observable.pipe(take(1)).subscribe for å begrense observablen til å få bare én verdi og slutte å lytte etter flere.

let firstName: string; 

        this.insureFirstName
            .pipe(take(1))  //this will limit the observable to only one value
            .subscribe((firstName: string) => {
                this.firstName = firstName; asssgning value 
            });
        console.log(this.firstName); //accessing the value

Relaterte artikler