我用$ interval在第一个控制器中运行某些功能。重定向到第二个控制器后,仍然运行$ interval注册功能(在第一个控制器中实现)。我想在不使用destroy函数的情况下停止$ interval服务。
答案 0 :(得分:3)
Note:必须明确销毁此服务创建的间隔 当你完成它们。特别是他们不是 当控制器的范围或指令时自动销毁 元素被破坏了。你应该考虑到这一点 确保始终在适当的时候取消间隔。看到 以下示例了解有关如何以及何时执行此操作的更多详细信息。
您可以使用cancel
方法清除$interval
对象。您应该在离开控制器时取消interval
。
为此你需要在eventListener
的{{1}}事件上添加$scope
,你可以做清理工作(例如取消间隔对象,取消超时对象)。
<强>代码强>
$destroy
答案 1 :(得分:2)
在rootScope中添加interval变量。并在第二个控制器打开时取消它,如下所示。
第一个控制器
$rootScope.stopInterval = $interval(function(){
//code goes here
}, 1000);
第二个控制器
$interval.cancel($rootScope.stopInterval);
注意:在这种情况下,只有缺陷是您需要在第一个控制器之后使用的所有控制器中停止它,但这是一个可靠的控制器。