如何在控制器中更改值时更新DOM

时间:2016-04-21 09:46:31

标签: angularjs angularjs-scope angularjs-ng-model ng-bind

我有一个函数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 个答案:

答案 0 :(得分:5)

Angular确实有摘要系统,有助于在视图上提供更新的绑定。但是当您更新来自角度的外部世界的角度绑定,如any (async) event时,角度无法理解变化,结果消化周期不会引发更新的绑定。因此,在您的情况下,您正在运行更新绑定的setInterval(异步事件)。

在这种情况下,您需要手动启动摘要周期($scope.$apply() / $scope.$digest())以查找更改并相应地更新视图上的绑定。但我仍然希望您使用$interval服务,该服务是开箱即用的,与setInterval&amp;这确实照顾了摘要周期以保持同步绑定。

您应该使用$interval代替setInterval

$interval($scope.getData, 1000);