Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie greife ich auf den aktuellen Wert eines RxJS-Subjekts oder Observables in Angular zu?

Linda Hamilton
Freigeben: 2024-11-01 07:12:31
Original
532 Leute haben es durchsucht

How to access the current value of an RxJS Subject or Observable in Angular?

Zugriff auf den aktuellen Wert von RxJS-Subjekten oder -Observablen

In Angular-Diensten ist es üblich, RxJS-Subjekte und Observables zum Verwalten des Status zu verwenden. Allerdings bieten diese Konstrukte natürlich keine Möglichkeit, ihren aktuellen Wert außerhalb des Abonnements abzurufen. In diesem Artikel wird erläutert, wie in solchen Szenarien auf den aktuellen Wert zugegriffen werden kann.

Betrachten Sie den folgenden Angular-Dienst, der ein Subject zum Verwalten einer booleschen Eigenschaft isLoggedIn verwendet:

<code class="typescript">import {Subject} from 'rxjs/Subject';
import {Injectable} from 'angular2/core';

@Injectable()
export class SessionStorage {
  private _isLoggedInSource = new Subject<boolean>();
  isLoggedIn = this._isLoggedInSource.asObservable();
  ...
}</code>
Nach dem Login kopieren

In einigen Fällen ist dies möglicherweise der Fall Sie müssen auf den aktuellen Wert von isLoggedIn zugreifen, ohne ihn zu abonnieren. Dies ist mit einem regulären Subjekt nicht möglich, da es nur Werte an seine Abonnenten ausgibt und seinen aktuellen Status nicht speichert.

Lösung: BehaviorSubject verwenden

Um dieses Problem zu lösen Einschränkung: Erwägen Sie den Wechsel zu BehaviorSubject, einem speziellen RxJS-Typ, der einen internen Puffer zum Speichern des zuletzt ausgegebenen Werts verwaltet.

<code class="typescript">import {BehaviorSubject} from 'rxjs/BehaviorSubject';

@Injectable()
export class SessionStorage {
  private _isLoggedInSource = new BehaviorSubject<boolean>(false);
  isLoggedIn = this._isLoggedInSource.asObservable();
  ...
}</code>
Nach dem Login kopieren

Im Vergleich zu Subject bietet BehaviorSubject zwei Hauptvorteile:

  1. Wenn neue Abonnenten mit dem Abhören beginnen, wird sofort der zuletzt gespeicherte Wert ausgegeben.
  2. Es stellt eine getValue()-Methode bereit, die programmgesteuerten Zugriff auf den aktuellen Wert ermöglicht.

Beispiel mit BehaviorSubject:

Mit BehaviorSubject können Sie auch ohne Abonnement auf den aktuellen Wert von isLoggedIn zugreifen:

<code class="typescript">const sessionStorage = new SessionStorage();
const isLoggedInCurrentValue = sessionStorage._isLoggedInSource.getValue();
console.log(isLoggedInCurrentValue); // True or False</code>
Nach dem Login kopieren

Zusammenfassend: Wenn Sie auf den aktuellen Wert von zugreifen müssen Wenn Sie ein RxJS-Subject oder Observable sind, sollten Sie einen Wechsel zu BehaviorSubject in Betracht ziehen, das sowohl eine sofortige Emission für neue Abonnenten als auch eine getValue()-Methode für den direkten Abruf bietet.

Das obige ist der detaillierte Inhalt vonWie greife ich auf den aktuellen Wert eines RxJS-Subjekts oder Observables in Angular zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage