我有一个计时器,每隔10秒轮询服务器一次数据。但是,每次用户切换到另一个控制器时,计时器都应该被销毁。出于某种原因,我的代码不会发生在下面。无论我是否更换控制器,计时器都会继续轮询服务器。
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);
}
});
};
答案 0 :(得分:3)
好像你有一个范围问题。您有$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);
}
});
};