Javascript 当$scope从一个控制器更改为另一个控制器并返回时,AngularJS$apply不会在间隔内调用
我用Angular创建了这个指令,它作为一个迷你计时器工作。我只需要数秒和分钟。只要我停留在调用该指令的页面上,该指令就工作得很好 问题是,当我切换到另一个页面然后返回时,我需要计时器仍然显示当前时间 我有一个全局Javascript 当$scope从一个控制器更改为另一个控制器并返回时,AngularJS$apply不会在间隔内调用,javascript,angularjs,Javascript,Angularjs,我用Angular创建了这个指令,它作为一个迷你计时器工作。我只需要数秒和分钟。只要我停留在调用该指令的页面上,该指令就工作得很好 问题是,当我切换到另一个页面然后返回时,我需要计时器仍然显示当前时间 我有一个全局窗口。timer对象保持计时器的状态 app.directive('callTimer', function() { return { restrict: 'E', controller: function($scope, $rootScope) { $
窗口。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()
。我想出来了。我发布了我正在做的事情的代码。也许是一个更好的方法,但这目前还有效。谢谢你的帮助!