2016-09-13 12 views
2

我々はこのような私たちのコントローラのコンストラクタ内のイベントブロードキャストを購読:。

var unsubscribe = $scope.$on("event-name", function() { // handle it }); 

をし、コントローラが破壊されますときに我々はメモリを防ぐために、このよう退会は

$scope.$on("$destroy", function() { 
    unsubscribe(); 
    unsubscribe = null; 
}); 

を漏らしますしかし、コントローラの破壊時には、サブスクライブされたハンドラが自動的に破棄される(コントローラのスコープで宣言されている場合 - この場合は)ので、これを呼び出す必要はありません。

本当に必要手動でそれらを退会されていますか?

答えて

1

技術的には、$scopeがイベントリスナーと一緒に破棄されるため、$scope.$onというイベントを登録解除する必要はありません。 (変数をnullに設定する必要もありません)。

$rootScopeが破壊されていないとして、それが$rootScope.$onリスナーは異なるのです。言われていること

、それは悪い習慣$scope.$onを使用してイベントに耳を傾けるか、$範囲内のイベントを作成するために考えられています。

  1. あなたは名前に自分自身を公開するコードが大きく
  2. これらのイベントは、アプリケーションごとのイベント(ログインのための意味を成し得るときあなたは 見つけるのは難しいだろうイベントを追加することで、あなたのコードを難読化している
  3. を競合、ログアウト、 通知など...)小さい孤立したイベントではない ( "received-product-list")
  4. $ scopeイベントが約束で置き換えられるようにコードをリファクタリングします。説明のための
+0

感謝。これを使用して、使用している第三者指令からの放送イベントを聴くことができます。私たちのコードでは、このアプローチを使用しません。 – jabko87

関連する問題