Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 取消路由更改后的angularjs超时不工作_Javascript_Angularjs_Angularjs Directive_Angularjs Ng Repeat_Angularjs Service - Fatal编程技术网

Javascript 取消路由更改后的angularjs超时不工作

Javascript 取消路由更改后的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);

我有一个计时器,每10秒轮询一次服务器上的数据。但是,每次用户切换到另一个控制器时,计时器都会被破坏。由于某些原因,我下面的代码不会发生这种情况。无论我是否更改控制器,计时器都会持续轮询服务器

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

我在等待$detroy活动时运气更好,如类似问题所述: