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>
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>
Im Vergleich zu Subject bietet BehaviorSubject zwei Hauptvorteile:
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>
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!