angularjs$间隔被多次调用

angularjs$间隔被多次调用,angularjs,Angularjs,在控制器内部,我调用$interval,在每秒钟的秒表服务之后进行函数调用 但问题是,当我回到这个路由器时,函数被调用的次数和我回到这个路由器的次数一样多,例如,如果我转到另一个菜单并回到这里。。计时器将更改两次。。如果我再做一次,那么特里斯 我在路线中尝试了以下3种方法,所有这些方法在控制器中的结果都是相同的: $timeout(updateTimer, 1000); setInterval(function () { $scope.$apply(updateTimer); }, 1000)

在控制器内部,我调用$interval,在每秒钟的秒表服务之后进行函数调用

但问题是,当我回到这个路由器时,函数被调用的次数和我回到这个路由器的次数一样多,例如,如果我转到另一个菜单并回到这里。。计时器将更改两次。。如果我再做一次,那么特里斯

我在路线中尝试了以下3种方法,所有这些方法在控制器中的结果都是相同的:

$timeout(updateTimer, 1000);

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

$interval(updateTimer, 1000);

为什么当我回到本页时,计时器被调用的次数与我返回本页的次数一样多???

Ech调用路由时,与该路由关联的控制器被实例化。每次实例化控制器时,都要开始一个间隔。所以你得到了这个结果

当控制器不再使用时,请确保取消间隔。T有一个关于这种情况的特定警告,以及一个示例,显示了一旦不再使用控制器,如何取消间隔:

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

var stop = $interval(...);

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