我有一个计时器,每 10 秒轮询一次服务器以获取数据。但是,每次用户切换到另一个 Controller 时,计时器都应该被销毁。出于某种原因,我下面的代码没有发生这种情况。无论我是否更换 Controller ,计时器都会不断轮询服务器。
Controller .js
$scope.init = function() {
//timer and timer stoper
$scope.counter= 0;
var mytimeout = $timeout($scope.onTimeout, 10000);
$scope.$on('$locationChangeStart', function() {
$timeout.cancel(mytimeout);
});
};
$scope.onTimeout = function() {
//polling server function
$scope.counter++;
var mytimeout = $timeout($scope.onTimeout, 10000);
var increase = 0;
inboxServ.check_newusers().then(function(data) {
if (data == "true") {
$scope.retrieveusers(increase);
}
});
};
最佳答案
您似乎遇到了范围问题。您有 $scope.init()
创建一个超时(由 mytimeout
持有)并且如果您开始更改位置还连接逻辑以取消它。但是,执行的函数 (onTimeout
) 启动另一个超时,但将其分配给不同的局部范围 mytimeout
。
如果您在前 10 秒内更改位置,我希望它按原样取消第一次超时,并且在此之后的任何时候都不会这样做,因为变量不同。
它可能就像把它改成这样一样简单:
$scope.init = function() {
//timer and timer stoper
$scope.counter= 0;
$scope.mytimeout = $timeout($scope.onTimeout, 10000);
$scope.$on('$locationChangeStart', function() {
$timeout.cancel($scope.mytimeout);
});
};
$scope.onTimeout = function() {
//polling server function
$scope.counter++;
$scope.mytimeout = $timeout($scope.onTimeout, 10000);
var increase = 0;
inboxServ.check_newusers().then(function(data) {
if (data == "true") {
$scope.retrieveusers(increase);
}
});
};
关于javascript - 在路由更改不起作用后取消angularjs超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511092/