内部控制器我在每隔一种秒表服务后调用$ interval来进行函数调用。
但问题是,当我回到此路由器时,函数被多次调用,例如如果我去另一个菜单并回到这里..计时器将被更改两次..如果我再做一次然后三次。
我在路线中尝试了以下3种方法,但控制器中的结果相同:
$timeout(updateTimer, 1000);
setInterval(function () { $scope.$apply(updateTimer); }, 1000);
$interval(updateTimer, 1000);
为什么在我回到这个页面时多次调用计时器?
答案 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);
});