ホームページ > ウェブフロントエンド > jsチュートリアル > Angular で RxJS Subject または Observable の現在の値にアクセスするにはどうすればよいですか?

Angular で RxJS Subject または Observable の現在の値にアクセスするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-01 07:12:31
オリジナル
567 人が閲覧しました

How to access the current value of an RxJS Subject or Observable in Angular?

RxJS Subject または Observable の現在値へのアクセス

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 つの主な利点があります。

  1. 新しいサブスクライバがリッスンを開始すると、保存されている最新の値がすぐに出力されます。
  2. 現在の値へのプログラムによるアクセスを提供する getValue() メソッドを公開します。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート