Javascript 取消路由更改后的angularjs超时不工作
我有一个计时器,每10秒轮询一次服务器上的数据。但是,每次用户切换到另一个控制器时,计时器都会被破坏。由于某些原因,我下面的代码不会发生这种情况。无论我是否更改控制器,计时器都会持续轮询服务器 controller.jsJavascript 取消路由更改后的angularjs超时不工作,javascript,angularjs,angularjs-directive,angularjs-ng-repeat,angularjs-service,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Repeat,Angularjs Service,我有一个计时器,每10秒轮询一次服务器上的数据。但是,每次用户切换到另一个控制器时,计时器都会被破坏。由于某些原因,我下面的代码不会发生这种情况。无论我是否更改控制器,计时器都会持续轮询服务器 controller.js $scope.init = function() { //timer and timer stoper $scope.counter= 0; var mytimeout = $timeout($scope.onTimeout, 10000);
$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);
}
});
};
我在等待$detroy活动时运气更好,如类似问题所述: