如标题所示。
当我们绑定像
这样的东西时$scope.text="ASD";
in html:
this is {{text}}
当我们更改$ scope.text时,由于2路绑定,在html中值也发生了变化。
我的问题是angularjs会更新ui多少毫秒?
编辑:
抱歉,我认为我的问题不够详细,我也很混淆如何完善我的问题。 额外的问题是,
成功获取数据后,有一个$ http, assgin到一些变量,称为$ scope.list。这个列表绑定到ui ngRepeat。因此,当我获得数据时,我不直接分配如此
$scope.list = data;
因为它将重新渲染ngRepeat DOM而不是那个,我手动分配数据
pseudo-code
for loop scope list
for loop data
if object equal then assing value to scope list [index] = data[index]
end loop
end loop
这是示例http://plnkr.co/edit/IHt6AoVUhRsUlBuumEGr?p=preview为什么我手动设置而不是使用" ="
所以回到问题,当我做更新列表时,我也加起来时间条件,例如在循环中
pseudo-code
for loop scope list
for loop data
every 0.001 secs do somethings, and manual set the value to the list
end loop
end loop
所以在内部循环和分配值的那个时候,UI更新是由事件触发还是在某个时间触发?
答案 0 :(得分:1)
简短回答:无,但您可能觉得需要几毫秒,具体取决于您的处理器速度以及在更新HTML之前需要检查的角度数量
答案很长:一旦你更新了模型(好吧,在当前javascript上下文的末尾),Angular将执行一个摘要周期,在该周期中它将处理所有$ watchers(in这种情况{{text}}
是text
属性的观察者。如果观察者具有与上次不同的值,则它将运行新的摘要周期,依此类推,直到所有观察者都稳定。然后,它将在浏览器最终呈现视图之前处理HTML并更新所有值。因此,从机器"从观点来看,它在同一个执行环境中是即时的:您的浏览器不会在它们之间呈现任何内容。
现在,如果您的代码是异步的(比如对某个服务器的调用),那么" immediaticity"我一直在谈论从$scope.$apply
答案 1 :(得分:1)
AngularJS在每$digest
个周期更新UI。 $digest
不会以固定的毫秒间隔运行;相反,它是在UI中触发某些事件时运行的(例如,使用ng-model
指令更改文本框中的文本)。
正如@Joe指出的那样,如果您在Angular知道的事件中运行代码(例如ng-change
事件),那么UI将立即更新。
如果您运行的某些代码在AngularJS不期望的时间运行(例如使用setInterval
或setTimeout
,则可以通过调用{{} {{}}来强制执行$digest
周期{1}},假设您有一个Angular范围的引用。
答案 2 :(得分:0)
假设$ scope.text =“ASD”在摘要周期内执行,ui将立即更新。
您可以将执行线程视为:
$scope.text="ASD"
...other code in this digest cycle (most likely nothing)
...renderui()
以毫秒为单位,我想这取决于你的CPU速度。
另一种说法是,它会像你自己手动更新DOM一样快,只需要少量的开销来运行角度的摘要周期。