javascript - 在路由更改不起作用后取消angularjs超时

标签 javascript angularjs angularjs-directive angularjs-ng-repeat angularjs-service

我有一个计时器,每 10 秒轮询一次服务器以获取数据。但是,每次用户切换到另一个 Controller 时,计时器都应该被销毁。出于某种原因,我下面的代码没有发生这种情况。无论我是否更换 Controller ,计时器都会不断轮询服务器。

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);
        }
    });

   };

最佳答案

您似乎遇到了范围问题。您有 $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);
         }
     });
};

关于javascript - 在路由更改不起作用后取消angularjs超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511092/

相关文章:

有 promise 的 Javascript (Angularjs) websocket?

javascript - Angular js - 不使用 ng-model 从 Controller 为动态生成的文本框赋值

javascript - 在 PWA service worker 中监听按钮点击

javascript - 如何确定值的 block 是否适合数组

angularjs - 再次调用Elasticsearch数据

javascript - 如何将指令作用域值传递给同一指令模板中调用的全局 JavaScript 函数?

javascript - AngularJS : directive does not update scope after $http response in parent scope

javascript - 如何从 javascript 中的 php 变量中提取日期和时间?

javascript - 是否可以在运行时更改 Backbone.Collection 的模型

javascript - 为什么我不能在 onClick html 事件上传递 angularJS 参数?