angularjs $ interval被多次调用

时间:2014-03-15 07:17:45

标签: angularjs

内部控制器我在每隔一种秒表服务后调用$ interval来进行函数调用。

但问题是,当我回到此路由器时,函数被多次调用,例如如果我去另一个菜单并回到这里..计时器将被更改两次..如果我再做一次然后三次。

我在路线中尝试了以下3种方法,但控制器中的结果相同:

$timeout(updateTimer, 1000);

setInterval(function () { $scope.$apply(updateTimer); }, 1000);

$interval(updateTimer, 1000);

为什么在我回到这个页面时多次调用计时器?

1 个答案:

答案 0 :(得分:13)

调用路由的Ech时间,实例化与此路由相关的控制器。每次实例化控制器时,您都会启动一个间隔。所以你得到了这个结果。

确保在不再使用控制器时取消间隔。 T he official documentation对此情况有一个特定的警告,并显示一旦控制器不再使用后如何取消间隔的示例:

  

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

var stop = $interval(...);

$scope.$on('$destroy', function() {
    // Make sure that the interval is destroyed too
    $interval.cancel(stop);
});