我一直在研究像计时器应用这样的简单秒表,以此来熟悉Angular JS。在this(How 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){
...
}
这一切都在上面的小提琴中按预期工作,但是当我在本地运行时,当我启动计时器时,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