有没有正确更新元素的正确方法是什么,而没有为$ 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);
使用最后的解决方案是否可靠?
答案 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
);