如何使用Angular更新绑定到函数的元素?

时间:2015-04-19 11:14:27

标签: javascript angularjs

有没有正确更新元素的正确方法是什么,而没有为$ interval回调中的每个变量明确地执行此操作?

这在以下情况下很有用:元素的内容绑定到一个函数,如下所示:

<p ng-bind="timeLeft()"></p>

timeleft()函数根据当前时间返回一个值。它需要每20毫秒刷新一次。

编辑:通常ngBind更新很好,但我想因为timeLeft()的结果只取决于时间的流逝,在这种情况下它不会。如果没有下面的代码,加载DOM后视图就不会更新,至少在没有更新其他值的情况下也不会更新。

我尝试了以下方法,它有效:

$scope.updateView = function(){
    if(!$scope.$$phase) { // To prevent this: "Error: [$rootScope:inprog] $digest already in progress"
        $scope.apply();
    }
}
$interval( function(){
    $scope.updateView();
}, 50);

我注意到使用$ interval可能已经足够了,在我的设置中也可以这样做:

$scope.updateView = function(){
}
$interval( function(){
    $scope.updateView();
}, 20);

使用最后的解决方案是否可靠?

1 个答案:

答案 0 :(得分:1)

是的,第二种解决方案应该可靠。 当从外部角度上下文发生事件时,Angular不会运行摘要周期,因为您需要告诉AngularJs运行应用周期来更新所有绑定。当你使用$interval angular会在执行回调函数后运行摘要周期时,你不需要运行你在第一个解决方案中完成的摘要周期。

您需要查看$interval服务

$interval($scope.updateView, 
  20, //delay
  10, //this option will run it 10 times, if not specified then infinite times 
  true, //do you want to run digest cycle after callback execution, defaulted to true
  {} //any extra params
);