Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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 当$scope从一个控制器更改为另一个控制器并返回时,AngularJS$apply不会在间隔内调用_Javascript_Angularjs - Fatal编程技术网

Javascript 当$scope从一个控制器更改为另一个控制器并返回时,AngularJS$apply不会在间隔内调用

Javascript 当$scope从一个控制器更改为另一个控制器并返回时,AngularJS$apply不会在间隔内调用,javascript,angularjs,Javascript,Angularjs,我用Angular创建了这个指令,它作为一个迷你计时器工作。我只需要数秒和分钟。只要我停留在调用该指令的页面上,该指令就工作得很好 问题是,当我切换到另一个页面然后返回时,我需要计时器仍然显示当前时间 我有一个全局窗口。timer对象保持计时器的状态 app.directive('callTimer', function() { return { restrict: 'E', controller: function($scope, $rootScope) { $

我用Angular创建了这个指令,它作为一个迷你计时器工作。我只需要数秒和分钟。只要我停留在调用该指令的页面上,该指令就工作得很好

问题是,当我切换到另一个页面然后返回时,我需要计时器仍然显示当前时间

我有一个全局
窗口。timer
对象保持计时器的状态

app.directive('callTimer', function() {
  return {
    restrict: 'E',
    controller: function($scope, $rootScope) {
      $scope.minutes = (window.timer.state.minutes || 0)
      $scope.seconds = (window.timer.state.seconds || 0)

      $scope.startTimer = function() {
        window.timer.interval = window.setInterval(function() {
          // incrementTimer
          window.timer.state = {minutes: $scope.minutes,seconds: $scope.seconds};
          $scope.$apply($scope.updateDisplay);
        }, 1000);
      };

      $scope.stopTimer = function() { /*stuff to stop timer*/};

      $scope.updateDisplay = function() {
        $scope.minDisplay = String($scope.minutes).padLeft('0', 2);
        $scope.secDisplay = String($scope.seconds).padLeft('0', 2);
      };

      $scope.updateDisplay();
    }
  };
});
这是html

<call-timer>{{minDisplay}}:{{secDisplay}}</call-timer>
{{minDisplay}:{{secDisplay}
计时器在我的主页上。当我转到另一个页面时,计时器将继续计数,但当我返回主页时,我的
updateDisplay
函数不会被调用


编辑:添加更多指令代码。

|它是单页应用程序吗?如果是,则不要将计时器存储在指令中。将其存储在某个控制器或其他位置。当您导航到另一个页面时,会重新创建指令,因此无法在指令中存储计时器值

好吧,我就想出来了。问题是,在从一个控制器切换到另一个控制器并返回之后,间隔内的$scope实际上是控制器的不同实例,而不是控制器的外部实例。这是我的代码(实际上是在coffeescript中)

它并不是最漂亮的,但其目的是在更新视图时传递我想要使用的范围。如果有人对我如何清理这个有想法,那就太棒了,但这段代码正是我所需要的


为什么不使用Angular的
$interval
$timeout
,它们可以注入指令/控制器/我最初使用的东西,但每次更换控制器时间隔都会被破坏。不过我可能错过了什么。我对angular很陌生。你提到这是在指令中,你能发布指令代码吗?(取决于您的代码在指令中的位置可能存在问题)我想每次运行该指令时都会调用
$scope.startTimer()
。我想出来了。我发布了我正在做的事情的代码。也许是一个更好的方法,但这目前还有效。谢谢你的帮助!