Reputation: 1277
I have this small piece of code that uses setInterval method:
function MyController($scope) {
$scope.clock = new Date();
var updateClock = function() {
$scope.clock = new Date();
};
setInterval(updateClock, 1000);
};
and html as follows:
<!doctype html>
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.js"></script>
</head>
<body>
<div ng-controller="MyController">
<h1>Hello {{ clock }}!</h1>
</div>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
However, setInterval
in MyController
does not update time.
Where possibly is wrong here ?
It works this way according to a book :
function MyController($scope) {
$scope.clock = new Date();
var updateClock = function() {
$scope.clock = new Date();
};
setInterval(function() {
$scope.$apply(updateClock);
}, 1000);
updateClock();
};
Why is that and what goes wrong without using @scope.$apply ?
Upvotes: 4
Views: 13537
Reputation: 9549
If you use the JS setInterval() then you will need $scope.$apply() to your method.
var updateClock = function() {
$scope.clock = new Date();
$scope.$apply();
};
The better solution is to use $interval (angular)
$interval(updateClock, 1000);
Upvotes: 5