Javascript setInterval()在angular.js中无法正常工作

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

稍后,我在angular.js控制器中使用setInterval()函数在UI上显示计时器。创建一个范围变量,该变量的非活动值以秒为单位

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);