这是我的控制者:
.controller('mainController', function($http, $scope, $timeout, $sce, updateService) {
updateData = function() {
updateService.getDataA($http, $scope);
updateService.getDataB($http, $scope, $sce);
}
var updateIntervalId = setInterval(updateData, 1000);
})
现在,当用户刷新页面时,仍然会发出旧请求,我试图通过将其置于间隔调用下来取消它:
window.onbeforeunload = function() {
console.log('interval killed');
clearInterval(updateIntervalId);
}
控制台正在记录'interval killed',所以它正在被执行,但仍在提出请求,为什么?
答案 0 :(得分:1)
让我们做角度方式
在控制器中注入$interval
服务
并将您的代码更新为以下
var intervalPromise = $interval(updateData, 1000);
$scope.$on('$destroy', function() { // Gets triggered when the scope is destroyed.
$interval.cancel(intervalPromise );
});
删除window.onbeforeunload
事件处理程序。
答案 1 :(得分:0)
说到angularJS,我总是建议使用$interval
来处理间隔,因为它对angularJS隐藏机制更有效。
然后,如果事件window.onbeforeunload
位于控制器之外,您将永远无法访问updateIntervalId
,因为它位于另一个范围内,因此您应该将其设置为全局。