Angular サービスでは、RxJS Subject と Observable を使用して状態を管理するのが一般的です。ただし、これらの構造体は、サブスクリプションの外部で現在の値を取得する方法を当然提供するわけではありません。この記事では、そのようなシナリオで現在の値にアクセスする方法について説明します。
ブール型プロパティ isLoggedIn を管理するために Subject を利用する次の Angular サービスを考えてみましょう。
<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>
場合によっては、 isLoggedIn をサブスクライブせずに現在の値にアクセスする必要があります。通常のサブジェクトでは、値をサブスクライバに送信するだけで、現在の状態を保存しないため、これは不可能です。
解決策: BehaviorSubject を使用する
これを克服するには制限がある場合は、最新の出力値を保存する内部バッファを維持する特殊な RxJS タイプである BehaviorSubject に切り替えることを検討してください。
<code class="typescript">import {BehaviorSubject} from 'rxjs/BehaviorSubject'; @Injectable() export class SessionStorage { private _isLoggedInSource = new BehaviorSubject<boolean>(false); isLoggedIn = this._isLoggedInSource.asObservable(); ... }</code>
Subject と比較して、BehaviorSubject には 2 つの主な利点があります。
BehaviorSubject を使用した例:
BehaviorSubject を使用すると、サブスクライブしなくても isLoggedIn の現在の値にアクセスできます:
<code class="typescript">const sessionStorage = new SessionStorage(); const isLoggedInCurrentValue = sessionStorage._isLoggedInSource.getValue(); console.log(isLoggedInCurrentValue); // True or False</code>
要約すると、現在の値にアクセスする必要がある場合は、 RxJS Subject または Observable の場合は、新しいサブスクライバーに対する即時発行と直接取得のための getValue() メソッドの両方を提供する BehaviorSubject に切り替えることを検討してください。
以上がAngular で RxJS Subject または Observable の現在の値にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。