2017-03-17 3 views
0

ログ(MDCに匹敵)とユーザーインタラクションやWebソケット接続のような2種類のトリガー用のグローバル "実行コンテキスト"サービスがあるとします。実行コンテキストに値を添付する方法は?

ログメッセージに「実行コンテキスト」を使用するロガーサービスがあります。

ユーザーがボタンを押すと、サービスがコンテキストを取得し、HTTP要求がトリガーされ、結果にログが記録されます。

一方、私たちはwebsocketを介してメッセージを受け取り、同様に解釈する必要があります。そこで、私たちは "実行コンテキスト"を設定し、既存のサービスを上書きします。

httpの結果を受け取る前にwebsocket observableがトリガされると、ログメッセージに同じ実行コンテキストが発生するという問題があります。

複数の観測値に対して独自の実行コンテキストを持つ可能性はありますか?
これはNgZone(zone.js)を使用することを考えていましたが、コンテキストを格納する方法が見つかりませんでした。

答えて

0

あなたはzone.jsを使ってそれを行うことができます。独自のコンテキストオブジェクトを格納する独自のzoneSpecを作成する必要があります。ボタンクリックイベントハンドラの

<button (click)="clicked()">Click</button> 

clicked() { 
    Zone.current.fork({ 
    name: 'context', 
    properties: { 
     context: YOUR_OWN_CONTEXT_OBJECT 
    } 
    }).run(()=> { 
    yourService.getData().subscribe(data => { 
     // you can access the context like this. 
     const context = Zone.current.get('context'); 
    }); 
    webSocket.on('message', function(data) { 
     // you can access the context like this. 
     const context = Zone.current.get('context'); 
    }); 
    }); 
} 

あなたの要件は何か分かりませんが、プランナーはデータの共有方法を示しています。 https://plnkr.co/edit/xHZbs1Zb04CbM73ydSYR?p=preview

+0

ありがとうございますが、ObservablesとAngularと組み合わせる方法はありますか? – CSchulz

+0

Observablesでの使用方法を説明するために私の答えを更新しました。 –

+0

これは角度からのNgZoneに関して好ましい方法ですか?ゾーンはインポートに使用できません。私はZone.js 0.7.7を使用しています。 – CSchulz

関連する問題