Как обновить DOM при изменении значения в контроллере
У меня есть функция getData, которая просто увеличивает значение счетчика var.
Всякий раз, когда происходит инкремент, я хочу, чтобы angular автоматически обновлял его внутри div
Я пробовал ng-bind, но он работает только при нажатии на элемент формы.
enquire.controller('DisplayEnquiries', function($scope){
$scope.getData = function(){
console.log('Run ' + $scope.counter);
$scope.counter;
if($scope.counter == undefined || $scope.counter == null){
$scope.counter = 1
$scope.counter++;
}
else{
$scope.counter++;
}
console.log('Execute ' + $scope.counter);
$scope.count = $scope.counter;
}
setInterval($scope.getData, 1000);
});
HTML
<div class="col-sm-5" ng-controller="DisplayEnquiries">
<h4>Unread User Queries</h4>
<p>
Count : <span ng-bind="count"></span>
</p>
</div>
1 ответ:
Angular имеют дайджест-систему, которая помогает обеспечить обновленную привязку над видом. Но когда вы обновили угловые привязки из внешнего мира angular, например
any (async) event, angular не понимает изменения, результирующий цикл дайджеста не получит огня для обновленной привязки. Поэтому в вашем случае вы запускаетеsetInterval(асинхронное событие), которое обновляет привязку.В таком сценарии вам нужно вручную запустить цикл дайджеста (
$scope.$apply()/$scope.$digest()) для поиска изменений и обновления привязки соответственно по представлению. Но все же я бы предпочел, чтобы вы использовали$intervalсервис, который предоставляется из коробки, которая делает ту же работу, что иsetInterval& которая заботится о цикле дайджеста, чтобы держать привязку в синхронизации.Вы должны использовать
$intervalвместоsetInterval$interval($scope.getData, 1000);