Javascript angularjs服务和控制器数据不同步

Javascript angularjs服务和控制器数据不同步,javascript,angularjs,angular-services,Javascript,Angularjs,Angular Services,我得到了一个非常简单的AngularJS应用程序。我曾经在我的控制器代码中有一个简单的倒计时计时器,但我决定将其分解为自己的服务。问题就是从这里开始的 以前,当我的计时器代码嵌入控制器时,countdownscope变量正确显示-根据计时器功能,每隔一秒钟,它将减少一次倒计时,直到0。然而,现在我已经将其移动到了一个服务中,并通过一些函数调用来回传递数据,countdown变量每秒倒2个数字,而不是1个。如果Iconsole.log(倒计时)在我的服务的rundownClock()函数中,每次传

我得到了一个非常简单的AngularJS应用程序。我曾经在我的控制器代码中有一个简单的倒计时计时器,但我决定将其分解为自己的服务。问题就是从这里开始的

以前,当我的计时器代码嵌入控制器时,
countdown
scope变量正确显示-根据计时器功能,每隔一秒钟,它将减少一次倒计时,直到0。然而,现在我已经将其移动到了一个服务中,并通过一些函数调用来回传递数据,
countdown
变量每秒倒2个数字,而不是1个。如果I
console.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>