Javascript angularjs服务和控制器数据不同步
我得到了一个非常简单的AngularJS应用程序。我曾经在我的控制器代码中有一个简单的倒计时计时器,但我决定将其分解为自己的服务。问题就是从这里开始的 以前,当我的计时器代码嵌入控制器时,Javascript angularjs服务和控制器数据不同步,javascript,angularjs,angular-services,Javascript,Angularjs,Angular Services,我得到了一个非常简单的AngularJS应用程序。我曾经在我的控制器代码中有一个简单的倒计时计时器,但我决定将其分解为自己的服务。问题就是从这里开始的 以前,当我的计时器代码嵌入控制器时,countdownscope变量正确显示-根据计时器功能,每隔一秒钟,它将减少一次倒计时,直到0。然而,现在我已经将其移动到了一个服务中,并通过一些函数调用来回传递数据,countdown变量每秒倒2个数字,而不是1个。如果Iconsole.log(倒计时)在我的服务的rundownClock()函数中,每次传
countdown
scope变量正确显示-根据计时器功能,每隔一秒钟,它将减少一次倒计时,直到0。然而,现在我已经将其移动到了一个服务中,并通过一些函数调用来回传递数据,countdown
变量每秒倒2个数字,而不是1个。如果Iconsole.log(倒计时)
在我的服务的rundownClock()
函数中,每次传递都会显示正确的倒计时数字,但是:10,9,8,7…到1
谁能找出我现在做错了什么,以及为什么会发生这种“重复计算”?我是否未在控制器中正确维护范围
以下是一些控制器,突出显示了相关CountdownService位:
myApp.controller('myCtrl', ['$scope', 'CountdownService', function($scope, CountdownService) {
// TIMER SERVICES
$scope.startTimer = CountdownService.startTimer;
$scope.runClock = function () {
$scope.updateCountdown();
if (($scope.countdown > 0) && ($scope.roundStarted == true)) {
CountdownService.rundownClock($scope.countdown);
}
};
$interval($scope.runClock, 1000);
$scope.updateCountdown = function () {
CountdownService.setCurrentRound($scope.currentRound);
$scope.countdown = CountdownService.getCountdown();
$scope.roundStarted = CountdownService.getRoundStarted();
}
}]);
这是一些有问题的服务。(不要担心开始时的rounds变量设置,它与问题无关):
最后是视图中的一个片段,其中显示倒计时范围变量:
<div class="timer md-body-2">{{ countdown }} seconds</div>
{{倒计时}}秒
更新@downvoter:
(在路线和模板的两个位置不使用控制器)
(在路线和模板中使用控制器)
我的原始答案
我认为您的myCtrl
控制器运行了两次,因此,您的$interval($scope.runClock,1000)代码>也运行了两次
是否使用注册myCtrl
作为路线控制器,并在模板中使用ng控制器 控制器中不应该是CountdownService.startTimer()?如何使用“new Date().getTime()/1000”来存储初始秒数,并获取经过的秒数?@cyan否,因为视图的另一部分实际上会调用onClick。有点奇怪,但它是如何工作的…:)rundownClock没有参数,但用参数调用。@JoaozitoPolo是的,我可能应该从使用经过的时间开始,但我是按我的方式做的。。如果您能告诉我为什么控制器和服务的数据不同步,我们将不胜感激。有线索吗?啊!现在我明白你的意思了,你完全正确我正在使用ng controller=myCtrl“
以及ng视图
。问题解决了!救生圈!
<div class="timer md-body-2">{{ countdown }} seconds</div>