AngularJs 停止特定控制器的 $interval

jan*_*a91 4 javascript events setinterval angularjs

我使用 $interval 在第一个控制器中运行某些功能。重定向到第二个控制器后,$interval 注册函数(在第一个控制器中实现)仍在运行。我想在不使用销毁功能的情况下停止 $interval 服务。

Pan*_*kar 5

注意:此服务创建的时间间隔必须在您完成后显式销毁。特别是当控制器的作用域或指令的元素被销毁时,它们不会自动销毁。您应该考虑到这一点,并确保始终在适当的时候取消间隔。有关如何以及何时执行此操作的更多详细信息,请参见下面的示例。

您可以使用该cancel方法来清理$interval对象。您应该interval在离开控制器时取消。

为此,您需要添加eventListenerover$scope$destroy事件,您可以做一些清理工作(例如取消间隔对象、取消超时对象)。

代码

var myInterval = $interval(function(){
   //your interval code
}, 1000)

//register this listener inside your controller where the interval belongs.
$scope.$on('$destroy', function(){
    $interval.cancel(myInterval)
});
Run Code Online (Sandbox Code Playgroud)

示例 Plunkr