web-dev-qa-db-ja.com

angularが破棄し始めたときに、ディレクティブでイベントリスナーのバインドを解除する必要がありますか?

アプリケーションに大量のメモリリークがありますが、原因はわかりません。背景は次のとおりです。

  • AngularJS + JQuery(プラグイン)を使用しています
  • 多くのリスナーは次のようにバインドされています。

    $(element).on( "keyup"、function(){});

だから質問は

次のようにして、ディレクティブでこれらのリスナーのバインドを解除する必要がありますか?

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

ところで、通常、Webアプリケーションのメモリリークをどのように見つけますか? Chromeのプロファイルを使用しています(ここを参照 メモリパフォーマンスのプロファイリング )が、メモリリークが発生しているコードを追跡できませんでした。何か提案はありますか?

どうもありがとう!

21
Edward

Angularスコープdestroyのドキュメントは、DOMイベントを削除する必要があることを意味します。

http://docs.angularjs.org/api/ng.$ro​​otScope.Scope#$destroy

AngularJSには$ destroy jQueryイベントもあり、要素がDOMから削除される前にDOMバインディングをクリーンアップするために使用できることに注意してください。

14
Scott Boring