2

アプリケーション全体で聴くことができるangular2でイベントを放出する方法はありますか? AngularJSのように、$rootScope.broadcastemitを使用しています。これはangle2でも同じことができますか?私は@Output()EventEmitter()について読んでそれを実装しましたが、それは親だけが子によって出されたイベントを聞くことを制限します。Angularのアプリケーション全体でイベントを放映してブロードキャストする

私は約BehaviorSubjectを読んでこれを行う方法の1つです。それは正しいアプローチですか?これに対する他の解決策はありますか?

+3

観察可能なものを使うことは良い選択です:http://stackoverflow.com/questions/34376854/delegation-eventemitter-or-observable-in-angular2/35568924#35568924 – j3r6me

+0

あなたの親に観察可能なものを追加することができます子供が発射するときに設定されます。それであなたは望みどおりのどこでも観測可能なものを購読することができます。 –

答えて

2

Angular2にはグローバルスコープはありません。コンポーネントとサービスのみがあります。

サービスでは、提供する場所によってサービスの範囲を定義できます。 @NgModule({providers: ...})(またはインポートされたモジュール)に1つを指定すると、グローバルに使用可能になります。コンポーネントに提供すると、このコンポーネントとその子コンポーネントのみが使用できます。共有サービスを使用する方法の例については

@Output() someOutput:EventEmitter = new EventEmitter();で放出さin Angular2 how to know when ANY form input field lost focus

イベントに示すようhttps://github.com/dart-lang/sdk/issues/27637

あなたはまた、バブルをバブリングDOMイベントをしていない派遣することができます参照してください。

+2

'BehaviorSubject'は簡単な方法です。ハードコアの反応主義者は、「被験者」は避けるべきだと考えている。 http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx、http://stackoverflow.com/questions/14396449/why-are-subjects-not- net-reactive-extensionsで推奨されていますので、これは疑念のある質問です。 rxjsを初めてお使いの方は、反応型プログラミングがより快適になり、自分で決定できるようになるまでそれを使用することをお勧めします。 –

+1

ありがとうございました!!私はそれをしなければならない。ちょうど私の知識のために確認したいサービスはそれを行うための最善の方法ですか? –

+0

サービスは** ** Angular2で行う方法です。 –

関連する問題