AngularJs为特定控制器停止$ interval

时间:2016-02-04 08:36:21

标签: javascript angularjs events setinterval

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

2 个答案:

答案 0 :(得分:3)

  

Note:必须明确销毁此服务创建的间隔   当你完成它们。特别是他们不是   当控制器的范围或指令时自动销毁   元素被破坏了。你应该考虑到这一点   确保始终在适当的时候取消间隔。看到   以下示例了解有关如何以及何时执行此操作的更多详细信息。

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

为此你需要在eventListener的{​​{1}}事件上添加$scope,你可以做清理工作(例如取消间隔对象,取消超时对象)。

<强>代码

$destroy

Sample Plunkr

答案 1 :(得分:2)

在rootScope中添加interval变量。并在第二个控制器打开时取消它,如下所示。

第一个控制器

$rootScope.stopInterval = $interval(function(){
   //code goes here
}, 1000);

第二个控制器

$interval.cancel($rootScope.stopInterval);
  

注意:在这种情况下,只有缺陷是您需要在第一个控制器之后使用的所有控制器中停止它,但这是一个可靠的控制器。