AngularJS视图不更新模型更改
我想弄清楚Angular是如何工作的,并且在模型更改的时候遇到了更新视图的问题。
HTML
<div ng-app="test"> <p ng-controller="TestCtrl"> {{testValue}} </p> </div>
JS
var app = angular.module('test', []); app.controller('TestCtrl', function ($scope) { $scope.testValue = 0; setInterval(function() { console.log($scope.testValue++); }, 500); });
http://jsfiddle.net/N2G7z/
有任何想法吗?
正如上面提到的Ajay beniwal,你需要使用Apply开始消化。
var app = angular.module('test', []); app.controller('TestCtrl', function ($scope) { $scope.testValue = 0; setInterval(function() { console.log($scope.testValue++); $scope.$apply() }, 500); });
只需使用$ interval
这里是你的代码修改。 http://plnkr.co/edit/m7psQ5rwx4w1yAwAFdyr?p=preview
var app = angular.module('test', []); app.controller('TestCtrl', function ($scope, $interval) { $scope.testValue = 0; $interval(function() { $scope.testValue++; }, 500); });
setTimout
在angular外执行。 你需要使用$timeout
服务这个工作:
var app = angular.module('test', []); app.controller('TestCtrl', function ($scope, $timeout) { $scope.testValue = 0; $timeout(function() { console.log($scope.testValue++); }, 500); });
原因是angular度中的双向绑定使用脏检查。 这是一个很好的文章来阅读有关angular度的脏检查。 $scope.$apply()
启动$digest
循环。 这将应用绑定。 $timeout
处理$apply
,所以这是使用超时时使用的推荐服务。
实质上,绑定发生在$digest
周期中(如果值看起来不同)。
不要使用$scope.$apply()
angular已经使用它,并且可能导致这个错误
$ rootScope:inprog操作已在进行中
如果使用两次,请使用$timeout
或interval