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

时间:2017-10-04 03:10:20

标签: javascript angularjs

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

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

这是我的代码:

http://jsfiddle.net/6guv9myu/

3 个答案:

答案 0 :(得分:2)

建议使用Angular的$interval服务

  1. 更可测试,
  2. 可选择在每次迭代时执行摘要循环。
  3. 您可以清除控制器$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")
    
    })
    

    有关详细信息,请参阅https://docs.angularjs.org/api/ng/service/$interval

答案 1 :(得分:0)

var repeater = setInterval(function () {
 console.log("interval");
 clearInterval(repeater);
}, 2000);

答案 2 :(得分:0)

你可以改变     var interval = 至     window.interval =

now interval将是一个可从javascript的任何区域访问的全局变量。 然后你可以打电话     clearInterval(window.interval);  在你的另一个控制器中。