明确间隔不起作用

时间:2016-03-24 13:56:31

标签: javascript angularjs

这是我的控制者:

  .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',所以它正在被执行,但仍在提出请求,为什么?

2 个答案:

答案 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,因为它位于另一个范围内,因此您应该将其设置为全局。