Angular アプリケーションでは、コンポーネントとサービスの間でデータをストリーミングするためにオブザーバブルが一般的に使用されます。よく発生する質問は、オブザーバブルをサブスクライブせずに現在の値を取得する方法です。
提供されたコードでは、SessionStorage サービスは _isLoggedInSource という名前のサブジェクトを使用して、現在のログイン状態を出力します。 isLoggedIn プロパティはこのオブザーバブルを公開しますが、現在の値の概念はありません。
この問題の解決策は、Subject の代わりに BehaviorSubject を使用することです。 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 中国語 Web サイトの他の関連記事を参照してください。