在 Angular 應用程式中,可觀察物件通常用於在元件和服務之間傳輸資料。出現的常見問題是如何在不訂閱的情況下檢索可觀察量的當前值。
在提供的程式碼中,SessionStorage 服務使用名為 _isLoggedInSource 的主題來發出目前登入狀態。雖然 isLoggedIn 屬性公開了這個可觀察值,但它沒有當前值的概念。
這個問題的解決方案在於使用BehaviorSubject而不是Subject。 BehaviorSubject 追蹤最近發出的值並立即將其傳送給新訂閱者。
<code class="typescript">import {BehaviorSubject} from 'rxjs/BehaviorSubject'; @Injectable() export class SessionStorage extends Storage { private _isLoggedInSource = new BehaviorSubject<boolean>(false); isLoggedIn = this._isLoggedInSource.asObservable(); constructor() { super('session'); } setIsLoggedIn(value: boolean) { this.setItem('_isLoggedIn', value, () => { this._isLoggedInSource.next(value); }); } }</code>
現在,您可以使用BehaviorSubject 的getValue() 方法來擷取目前登入狀態:
<code class="typescript">isLoggedIn = sessionService._isLoggedInSource.getValue();</code>
透過使用BehaviorSubject,即使不訂閱它,您也可以存取可觀察對象的目前值。當您需要讀取程式碼中特定點的最新發出值時,這特別有用。
以上是如何在 Angular 中檢索 RxJS 主題或可觀察物件的目前值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!