2013-06-06 6 views
7

私は指示のコントローラーで$scope.$watchを宣言しています。ページを変更してディレクティブが削除されたら、手作業で破壊する必要がありますか?もしそうなら、どのように指令が削除されたかを検出するのですか?Angularjs指令は時計を取り外しますか?

+0

角はあなたのためにそれを配慮する必要があります –

答えて

20

これは、ディレクティブではなくスコープによって異なります。スコープが破棄された場合、その$ watcherはすべてそのスコープで終了します。あなたのスコープは角度によって破壊されるので、あなたは安全でなければなりません。

スコープが終了すると、$ destroyイベントが発生します。あなたはそれを見ることができます。

$scope.$on('$destroy', callback); 

と、手動でそれが返す関数を呼び出すことで、範囲から$ウォッチャーを切り離すことができます。

var sentinel = $scope.$watch('expression', callback); 
sentinel(); // kill sentinel 

あなたはあまりにも上の$でこれを行うことができます。

+0

まず、スコープが破壊されると、すべてのウォッチャーがそれで死ぬと言いました。次にスコープ$ destroyイベントでウォッチャーを手動で削除するように提案しました(なぜ?スコープで自動的に死ぬはずです)。それは私には意味がありません。どうぞあなたは詳しく教えていただけますか? – hendrix

+1

ngViewでページを変更すると、最後のスコープがウォッチャーでクリーンアップされます。 (proof => http://goo.gl/GD0pM9) また、angleはウォッチャー破棄関数を提供しますので、現在のスコープでそれを必要としない場合は手動で式を削除することができます。 – Oliver

関連する問題