我在更改路线时遇到有关$interval
功能的问题。
这是代码:
x = 2;
var multiply = function () {
x = x * 2;
if (x == 134217728) {
$interval.cancel($scope.stop);
$scope.stop = 0;
}
}
$scope.Result = function () {
$scope.stop = $interval(multiply, 1000);
}
$scope.Result();
当x<134217728
时,我改变路线以移动到另一页。问题是$interval
在路线改变后没有停止。我将承诺存储在stop
模型中的变量$scope
中。我认为$scope
在路线改变后不会破坏,这就是$interval
继续的原因。
我该如何解决这个问题?
答案 0 :(得分:14)
您可以在控制器/服务中调用$interval.cancel($scope.stop);
时使用$locationChangeSuccess
。
E.G。
controller('MyController', function($rootScope, $interval) {
$scope.stop = $interval(yourOperation, 1000);
var dereg = $rootScope.$on('$locationChangeSuccess', function() {
$interval.cancel($scope.stop);
dereg();
});
function yourOperation() {}
};
答案 1 :(得分:0)
因为你也在其他控制器中注入$ interval,你可以设置$ interval 在其他控制器中,或者您可以使用@ryeballar提到的$ locationChangesuccess取消$ interval。