2012-12-12 19 views
14

AngularJSでバインディングを切断する適切な方法は何ですか?AngularJS - メモリリークを避けるためにバインディングを削除する

私はanglejを使用してデータバインディングを行うコンポーネントをロードする非角形のアプリケーションを持っています。ある時点で、コンポーネントを破棄して、メモリリークがないことを確認したいと思っています。 DOMのその部分からすべてのイベントリスナーを削除するには、どのようにangleを指定するのですか?

$(node).remove()トリックをするか、メモリ内の他のものをクリーンアップする必要がありますか? mem-leaksを避けるためのヒントは、どれでもお勧めです。

答えて

10

remove()のようなスコープを持つDOM要素を削除しても、メモリ内のスコープは削除されません。これを確認するには、要素を削除してBatarangを参照するか、親スコープを取得してその子を調べます。スコープがまだそこにあるのを見るでしょう...だから、$destroy()にスコープ自体を呼びたいと思うでしょう。

More information about $destroy() can be found here

EDIT:スコープを完全に削除するか、それを切断してJavaScript GCで残りの部分を処理するかどうかはわかりません。

+0

クイックレスポンスありがとう! –

+0

ドキュメントには、スコープとDOM要素のバインドを解除するjQueryイベントもありますが、ユースケースの例は示されていません。それは、要素のスコープを見つけ、destroyメソッドを呼び出してから、jquery remove()を使用する場合ですか?この機能は角度の中に完全な機能として存在していないのが奇妙に思えます! – sidonaldson

+0

スコープをwindow.leakに割り当ててスコープのコンソールログを設定した場合、$ on( 'destroy'、...)を実行するとdestroyが呼び出されますが、引き続きリークからスコープにアクセスできます。 –

関連する問題