2016-12-13 10 views
0

私は、SignalRプロキシをラップするAngular 1.5サービスを持っています。 Angularアプリが壊れてしまったとき、明示的なSignalRタイムアウトを待つのではなく、ユーザーが登録したすべてのSignalRグループを明示的に残したいと思います。アングル1.5サービスのデストラクタ

私は角1.5倍のコントローラと、私は聞くことができることを知っている:

$scope.$on("$destroy", function handler() { ... }); 

しかし、私はサービス内で「クリーンアップ」と私はもはや必要なリソースを解放する方法がわかりません。助言がありますか?

答えて

-1

サービスはアングル型のシングルトンなので、破壊的な方法はありません。 私はSignalRに慣れていませんが、メソッドのようにサブスクライブしない場合は、リスナーを必要としないときにこのメソッドを呼び出す必要があります。

+0

@FunnStuff、それはこすりだ - 私は、ユーザーがアプリケーションを完了し、ドメインからナビゲートするか、ブラウザを閉じるまで、SignalRチャンネルを開く必要があります。 – zippydev

+0

onbeforeunloadイベントを受け入れることができます。ページがアンロードされようとしているときにJavaScriptを実行します。(閉じる) – Bazinga

0

あなたのサービスでクリーニング機能を定義して、コントローラー$destroyと呼んでください。

角度1.5では、コンポーネントに$ onDestroyもあります。

しかし、$destroyは常に呼び出される(つまり、ユーザーがブラウザを強制終了させる)ことはできないので、サーバー側でも解決策を提供する必要があります。

+0

サービスは、Singletonsで、AngularJSアプリケーションの全期間にわたって生きているので、サービス内でデストラクタ関数コントローラが破壊されたときはいつでもコントローラは、角度アプリケーションの寿命内で何度もインスタンス化され、破壊されることがありますが、サービスは一度インスタンス化され、シングルトンリファレンスはインジェクタによって再利用されます。私の理解は間違っていますか? – zippydev

+0

'コントローラーが破壊されたときはいつでも、サービス内のデストラクター関数を確実に呼び出すことはできません.'サービスを"破棄 "しないでください。サービスが提供するリソースを終了するだけです。アトミック・フラグを使用して、サービスが現在リソースにサービスを提供しているかどうかを判断できます。 [この質問](http://stackoverflow.com/questions/25131691/angular-using-server-event-events-in-a-factory)角度アプリケーションでサーバー送信イベントストリームをセットアップするのに役立ちました – svarog

関連する問題