我正在使用 setInterval() 来检查(每隔几秒)用户的 token 是否已过期。但是,因为我已将其包含在 $routeChangeStart 中,所以每次路线更改时都会运行该间隔。例如:如果我加载页面然后单击不同的路线,那么该间隔将再次运行,总共运行两个间隔。我在一开始就设置了clearInterval(),因为我认为它会停止任何当前间隔的运行。但是,这不会阻止间隔在每次路线更改时运行。除了在 $routeChangeStart 之外运行间隔之外,是否有办法在路线更改时停止间隔,然后重新启动它?
$rootScope.$on('$routeChangeStart', function() {
clearInterval(interval);
var interval = setInterval(function() {
var token = $window.localStorage.getItem('token');
self.parseJwt = function(token) {
var base64Url = token.split('.')[1];
var base64 = base64Url.replace('-', '+').replace('_', '/');
return JSON.parse($window.atob(base64));
}
var expireTime = self.parseJwt(token);
var timeStamp = Math.floor(Date.now() / 1000);
var timeCheck = expireTime.exp - timeStamp;
if (timeCheck <= 0) {
console.log('time expired');
clearInterval(interval);
} else {
console.log('time not expired');
}
}, 2000);
});
最佳答案
用 $scope.on('$destroy', function () { $interval.cancel(intervalReturnValue);});
销毁间隔
在您开始间隔的 Controller 中
关于javascript - AngularJS - 在 $routeChangeStart 中运行 setInterval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317405/