在 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中文网其他相关文章!