BehaviorSubjectはサブジェクトのタイプです。サブジェクトは特殊なタイプのオブザーバブルであるため、他のオブザーバブルと同様にメッセージをサブスクライブできます。BehaviorSubject のユニークな機能は次のとおりです。
- サブスクリプションを受け取っていなくても、常にサブスクリプションで値を返す必要があるため、初期値が必要です。
next()
- 購読すると、サブジェクトの最後の値を返します。通常のオブザーバブルは、
onnext
- 任意の時点で、
getValue()
メソッドを使用して、観察不可能なコードでサブジェクトの最後の値を取得できます。
オブザーバブルと比較したサブジェクトの固有の機能は次のとおりです。
- オブザーバブルであるだけでなくオブザーバーでもあるため、サブジェクトにサブスクライブするだけでなく、サブジェクトに値を送信することもできます。
asObservable()
さらに、メソッド onを使用して、behaviour subject からオブザーバブルを取得できますBehaviorSubject
。
Observableは Generic であり、BehaviorSubject
技術的には Observable のサブタイプです。これは、BehaviorSubject が特定の性質を持つ Observable であるためです。
BehaviorSubjectの例:
// Behavior Subject
// a is an initial value. if there is a subscription
// after this, it would get "a" value immediately
let bSubject = new BehaviorSubject("a");
bSubject.next("b");
bSubject.subscribe(value => {
console.log("Subscription got", value); // Subscription got b,
// ^ This would not happen
// for a generic observable
// or generic subject by default
});
bSubject.next("c"); // Subscription got c
bSubject.next("d"); // Subscription got d
通常の件名を使用した例 2:
// Regular Subject
let subject = new Subject();
subject.next("b");
subject.subscribe(value => {
console.log("Subscription got", value); // Subscription wont get
// anything at this point
});
subject.next("c"); // Subscription got c
subject.next("d"); // Subscription got d
Subject
Observable は、 と の両方からBehaviorSubject
作成できますsubject.asObservable()
。
唯一の違いは、メソッドを使用してオブザーバブルに値を送信できないことですnext()
。
Angular サービスでは、Angular サービスがBehaviorSubject
コンポーネントの前に初期化されることが多いため、データ サービスに使用します。このデータへのコンポーネントのサブスクリプション以降に新しい更新がない場合でも、サービスを使用するコンポーネントが最後に更新されたデータを受信することを動作サブジェクトが保証します。