2016-10-04 12 views
1

私は行動の問題BehaviorSubject<MyModel>(new MyModel)を持っています。私が行った読書によれば、私は、サブジェクトが行動サブジェクトに対して行われるたびに、サブスクリプションが完了するとすぐにサブスクライバがデフォルトのMyModelオブジェクトを取得することを知りました。Rxjs:BehaviourSubject value emission

しかし、私はこのシナリオでは混乱しています.が動作の対象に登録されていて、それを使って調整した後にobsevrableに値を出したとします。 ClassAが放出された後、ClassBがサブジェクトにサブスクライブするので、サブスクリプションのClassBnew MyModel()オブジェクトまたは最後にサブジェクトから放出されたモデルを受信します。

さらなる説明が必要な場合は教えてください。

+3

放出され、最後の1。 'BehaviorSubject'は直ちに新しいサブスクリプションで発行された最新の値を起動します。 – drewmoore

+2

^^これは一般的にSubjectの真ではなく**特にBehaviorSubjectを指します。たとえば、 'ReplaySubject'は、直前に発行されたすべての値を新しいサブスクリプションの順番で即座に放出します。 – drewmoore

+0

私は 'ReplaySubject'、つまり' BehaviourSubject'を持っていません。私は 'ReplaySubject'がどのように動作するのかを知っています –

答えて

2

これはコメントとしてスタートしたが答えになって:あなたのシナリオでは

ClassBインスタンスは、あなたのClassAインスタンスによって放出されるMyModel例えば、あなたがnew MyModel()経由で最初に作成ない 1を取得します。一般的に

BehaviorSubjectはすぐに新しいサブスクリプションに単一の最も最近放出された値を発射する - この動作はBehaviorSubjectを定義するものです - 対、例えば、ReplaySubjectはすぐにそれぞれの上に、これまでに放出されたすべて値を発します新しいサブスクリプション。これは実験的に証明するのは簡単です

注: