2016-03-22 5 views
0

私は1つの主要なコンポーネントを持っています。このコンポーネントの中で私はWebSocketを使ってサーバーからデータを受け取ります。私はその中に様々なフィールドを持つオブジェクトを受け取ります。たとえば、フィールド数は0から10までです。オブジェクトを受け取るたびに、forEach()を使用してすべてのフィールドを取得します。各フィールドのために、私はこのように、コンポーネントを初期化する必要があります。角2の複数のコンポーネントを持つwebsocketデータを共有する

self.dcl.loadIntoLocation(StreamComponent, self.elementRef, 'stream');

がすでに存在するオブジェクトの現在のフィールドのためのコンポーネントのコピーが、私は新しい受信データとそれを更新する必要がある場合ビュー内で私の主な問題は、WebSocketから作成されたコンポーネントにデータを渡す方法がわかりません。私はそれを作成して初期化することができますが、データをそれに渡す方法は決して気にしません。何か案は ?

答えて

1

あなたはメソッドから返された約束を活用しようとすることができます:

self.dcl.loadIntoLocation(
    StreamComponent, self.elementRef, 'stream').then((compRef:ComponentRef) => { 
    compRef.instance.someAttr = something; 
}); 

この約束は、あなたが新たに作成されたコンポーネントのインスタンスを取得し、そのプロパティにデータを設定することができます(例えば、ウェブソケット) 。

+0

私はこのコードをテストします。 (compRef:ComponentRef)=> { compRef.instance = {name: 'name'}; 'self.dcl.loadIntoLocation(StreamComponent、self.elementRef、 'stream')。 ; }); ' 私はそれをテストする変数' name'をハードコードします。 – Edward

+1

実際には、次のようにしてください: 'self.dcl.loadIntoLocation(StreamComponent、self.elementRef、 'stream')。then((compRef:ComponentRef)=> {compRef.instance.name = 'name'}; console .log(compRef);}); '。それ以外の場合は、コンポーネントインスタンス自体をオーバーライドします... –