2016-04-15 22 views
1

TL; DR:Angular2:シングルトンメンバー対観察可能なサブスクリプション

https://plnkr.co/edit/QP5skRU1MJ3ZoOtlA15I?p=preview

は、なぜあなたは、そのサービス内で観測可能にサブスクリプションを介してサービスのローカル変数を使うのでしょうか?それは混乱だ理由の

例:plunkで

、あなたは私は2つのコンポーネントとサービスを持って表示されます。これらの2つのコンポーネントは、そのサービスに存在するObservableを共有します。

サービスでは、私は公開変数を更新し、その値をオブザーバーにプッシュします。

これは私には重複しているようなコードですが、私はAngular2チュー​​トリアルでそれをすべて見ています。

のsrc/number.ts

this.num = { 
    num: new Date().getTime() 
}; 

this.observer.next(this.num); 

なぜ私はどちらか一方をしますか?私はサブスクリプションメソッドを好むが、彼らは同じことをするようだ。私は何が欠けていますか?

注: setIntervalとNgZoneジャンクはデモンストレーション目的でのみ存在します。現実には、このデータはHTTPから来て、変数を更新したり、加入者にプッシュしたりするでしょう。私はちょうど毎秒の時間をつかんだので、NgZoneも使わなければなりませんでした。

答えて

1

これは、Observableの場合、イベントが発生したときに値を取得するだけですが、直近の(現在の)値をすぐに求め、後で更新については知らされないことがよくあります。

あなたはすぐに新しい加入者に再度、最後の放出された値を発する、またはあなたがRxのとあまり精通している場合、あなたはおそらく、あなたの質問に記載されたパターンを使用するBehaviorSubjectを使用することができます。これにより、

this.prop = this.service.num; this.service.observable.subscribe(val => this.prop = val);

最後の値を直ちに取得し、観測値からの使用時に更新します。

+1

ああ!私は今の違いを見る! 'this.prop = 123'を使用しているビューでは、値が変更されたときに更新することはできません。観測可能な状態では、準備ができるまで 'next()'しないか、サブスクリプションコールバックの 'this.prop = 123'より前の値を調べることによって、いつ更新するかを制御できます。 – oooyaya

+0

はい、それは別の使用例です。 –

関連する問題