为什么使用$ interval / $ timeout重置角度变量?

时间:2014-04-11 15:17:37

标签: javascript angularjs timer

我一直在研究像计时器应用这样的简单秒表,以此来熟悉Angular JS。在thisHow do I use $scope.$watch and $scope.$apply in AngularJS?)的帮助下,我能够在javascript端获得两个不同的变量,以便在使用$ watch进行更改时彼此同步。我使用它们来显示不同格式的开始时间。

然后我想用相同的方法来更新当前位置。最初我使用setInterval和clearInterval来处理定时器更新。在这种情况下,$ watch没有捕获更新,并且DOM没有被更改。

这个问题指出Angular有自定义$ timeout和$ interval函数来处理$ apply和$ watch更新:

using setInterval in angularjs factory

使用$ interval我遇到了一些麻烦。我得到了" $ interval未定义"。为了使它可用,我将其作为控制器函数定义的一部分传递:

app.controller("MainController", function($scope, $interval){
   ...
}

http://jsfiddle.net/6zJmS/9/

这一切都在上面的小提琴中按预期工作,但是当我在本地运行时,当我启动计时器时,start和position变量会重置为0。计时器继续运行并登录到控制台,但在此之前我看到意外的重置:

Updating set_to to 10 app.js:52
start called app.js:76
event.returnValue is deprecated. Please use the standard event.preventDefault() instead. angular.js:2606
Updating hms to 00:00:00 app.js:46
Updating set_to to 0 app.js:52
Updating hms to 00:00:00 app.js:46
9 

为什么我在本地看到重置的任何想法?

P.S。

在此过程中,我发现使用Angular JS的计时器实现得更加精准,以防您正在寻找的内容:

http://siddii.github.io/angular-timer/

https://github.com/siddii/angular-timer

谢谢!

编辑: 万一有帮助,我在这里发布了完整的代码: https://github.com/charlesbrandt/timer

0 个答案:

没有答案