Javascript setInterval()在angular.js中无法正常工作
稍后,我在angular.js控制器中使用setInterval()函数在UI上显示计时器。创建一个范围变量,该变量的非活动值以秒为单位Javascript setInterval()在angular.js中无法正常工作,javascript,angularjs,setinterval,Javascript,Angularjs,Setinterval,稍后,我在angular.js控制器中使用setInterval()函数在UI上显示计时器。创建一个范围变量,该变量的非活动值以秒为单位 setInterval(function(){ scope.timer++ }, 1000); 它要做的是,它应该每秒更新一次屏幕。但事实并非如此。有时它会在2秒、3秒后更新屏幕,有时它会每秒钟更新一次,但并不一致。 当我记录范围时。计时器值—它的行为正常 这会有什么问题呢。angular.js是否以某种方式限制了本机javascript? 使用范围。$ap
setInterval(function(){ scope.timer++ }, 1000);
它要做的是,它应该每秒更新一次屏幕。但事实并非如此。有时它会在2秒、3秒后更新屏幕,有时它会每秒钟更新一次,但并不一致。
当我记录范围时。计时器值—它的行为正常
这会有什么问题呢。angular.js是否以某种方式限制了本机javascript?
使用范围。$apply
setInterval(function(){ scope.timer++; scope.$apply(); }, 1000);
setInterval不是角度函数,因此范围不刷新
或使用角度服务(首选解决方案):
值可能在
控制器中更新,但在DOM中不更新
试试这个
JS
setInterval(function(){
scope.timer++
setTimeout(function(){
$scope.$apply();
}, 1);
}, 1000);
或者您可以使用$interval
并按照我的答案进行操作。您可以使用$timeout
而不是setTimeout,也可以使用
将您的代码更新到此位置
$interval(function(){
$scope.timer++;
}, 1000)
请确保您的$scope.timer
已正确初始化setInterval
不是角度函数,因此不会刷新范围,我不建议使用scope.$apply()
,因为这是一种浪费
使用angular的内置$interval
方法:
.controller('ExampleController', ['$scope', '$interval',
function($scope, $interval) {
stop = $interval(function() {
$scope.timer++;
}, 1000);
});
文档:$interval最好使用,例如:
var-app=angular.module('MyApp',[]);
app.controller('AppCtrl',函数($scope,$interval){
$scope.timer=0;
$interval(函数(){$scope.timer++;},1000);
});代码>
您可以尝试从
您必须将其添加到控制器并使用它,如(view Plunker)
setInterval是一个JS本机函数,要在摘要循环中执行它,应该调用apply()方法,或者使用AngularJS文档中建议的包装器$interval
$interval(function(){ scope.timer++ }, 1000);
$interval我认为在这种情况下,使用$interval比使用$apply更可取,建议使用$apply@GopinathShiva谢谢您的评论我更新了答案,感谢:)更多参考:
app.controller('testController', ['$scope', '$interval', function($scope, $interval) {
var count = 1;
$scope.count = count;
$interval(function() {
$scope.count++;
}, 1000);
}]);
$interval(function(){ scope.timer++ }, 1000);