更改路线时,$ interval功能会继续

时间:2014-06-20 10:01:27

标签: angularjs

我在更改路线时遇到有关$interval功能的问题。

这是代码:

  x = 2;

 var multiply = function () {
     x = x * 2;
     if (x == 134217728) {
         $interval.cancel($scope.stop);
         $scope.stop = 0;
     }
 }


 $scope.Result = function () {
     $scope.stop = $interval(multiply, 1000);
 }

 $scope.Result();

x<134217728时,我改变路线以移动到另一页。问题是$interval在路线改变后没有停止。我将承诺存储在stop模型中的变量$scope中。我认为$scope在路线改变后不会破坏,这就是$interval继续的原因。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:14)

您可以在控制器/服务中调用$interval.cancel($scope.stop);时使用$locationChangeSuccess

E.G。

controller('MyController', function($rootScope, $interval) {
  $scope.stop = $interval(yourOperation, 1000);

  var dereg = $rootScope.$on('$locationChangeSuccess', function() {
    $interval.cancel($scope.stop);
    dereg();
  });

  function yourOperation() {}
};

答案 1 :(得分:0)

因为你也在其他控制器中注入$ interval,你可以设置$ interval 在其他控制器中,或者您可以使用@ryeballar提到的$ locationChangesuccess取消$ interval。