公式ドキュメントavailable hereに基づいて、コントローラのスコープが破壊されたときに、$interval
を使用して作成された間隔は自動的に破棄されていません。
注:このサービスによって作成された間隔は、終了すると明示的に破棄する必要があります。 特にコントローラの有効範囲またはディレクティブの 要素が破棄されたときに、自動的に破棄されるのは ではありません。これを考慮に入れて、 適切な瞬間に常に間隔をキャンセルするようにしてください。
スコープの$destroy
イベントをリッスンし、コントローラで作成されたすべての間隔を破棄することをお勧めします。
これを行うには良い方法があります。
var intervalRef;
$scope.someFunction = function() {
// Save a reference to the interval's promise so that it can be canceled later
intervalRef = $interval(function() {
console.info("ACCOUNT")
}, 1000);
}
$scope.$on("$destroy", function() {
// When the scope of the controller is destroyed, cancel the interval
if (intervalRef) {
$interval.cancel(intervalRef);
}
});
ああ、ありがとう!おそらくそれをデバッグする最良の方法ではないでしょう。 しかし、私は$ window.onfocusを使用している間にこの問題を発見しました。これは古いコントローラと呼ばれています。 ドキュメントをもう一度見逃しているかもしれませんが、それに関する情報は見つかりませんでした。 – inventivetalent
Nvm、 '$ destroy'イベントを使用してonfocusイベントを設定解除しました。 – inventivetalent
'$ scope。$ on'を使ってセットアップされたイベントリスナは、' $ scope'がガベージコレクトされると自動的にクリーンアップされます。手作業ですべてを清掃する必要があります。 – CodeWarrior