Javascript 如何在转到另一个控制器时清除setinterval(我不想执行clearInterval(var))

Javascript 如何在转到另一个控制器时清除setinterval(我不想执行clearInterval(var)),javascript,angularjs,Javascript,Angularjs,目前,在我的主控制器中,我正在运行setinterval。我想当我换成另一个控制器时,间隔就结束了。但是我不想在同一个控制器上执行clearInterval()。我怎么做 .controller('MainCtrl', function ($scope, $state) { var interval=setInterval(function(){ console.log("interval") },3000) $state.go("hom

目前,在我的主控制器中,我正在运行setinterval。我想当我换成另一个控制器时,间隔就结束了。但是我不想在同一个控制器上执行clearInterval()。我怎么做

   .controller('MainCtrl', function ($scope, $state) {
      var interval=setInterval(function(){
        console.log("interval")
      },3000)
      $state.go("home");
  });
这是我的代码:

您可以更改 变量间隔= 到 窗口间隔=

现在interval将是一个全局变量,可以从javascript的任何区域访问。 那你可以打电话来 clearInterval(window.interval);
在其他控制器中。

建议使用Angular的
$interval
服务

  • 更易于测试,并且
  • 可选地,在可能需要的每个迭代中执行摘要循环
  • 您可以清除控制器的
    $destroy
    事件中的间隔

    .controller('MainCtrl', function ($scope, $state, $interval) {
      var interval = $interval(function() {
        console.log("interval")
      }, 3000)
    
      $scope.$on('$destroy', function() {
        $interval.cancel(interval)
      })
    
      $state.go("home")
    
    })
    

    有关更多信息,请参阅。

    “但我不想在同一控制器上执行clearInterval()”。您还可以指定全局var间隔,以便在其他控制器中取消它。我已经编辑了你的JSFIDLE
    .controller('MainCtrl', function ($scope, $state, $interval) {
      var interval = $interval(function() {
        console.log("interval")
      }, 3000)
    
      $scope.$on('$destroy', function() {
        $interval.cancel(interval)
      })
    
      $state.go("home")
    
    })