当我通过Angular应用程序中的websockets接收数据时,我一直在使用$scope.$apply()
来更新我的模型的绑定。但它实际上做了什么以及为什么需要调用它来实现更新?
答案 0 :(得分:4)
如果您致电$apply
,则会在angular-context
中执行所提供的代码,您可以使用角色提供的代码。
来自link:
Angular通过提供自己的事件处理循环来修改正常的JavaScript流。这将JavaScript拆分为经典和Angular执行上下文。只有在Angular执行上下文中应用的操作才会受益于Angular数据绑定,异常处理,属性监视等......
您还可以使用$ apply()从JavaScript输入Angular执行上下文。请记住,在大多数地方(控制器,服务),已经通过处理事件的指令为您调用了$ apply。只有在实现自定义事件回调或使用第三方库回调时,才需要显式调用$ apply。
答案 1 :(得分:1)
简单地说:
I also wrote a blog entry about what $apply, $digest and $watch do and how they work together
我希望有所帮助。
答案 2 :(得分:1)
来自Angular docs:
$ apply()用于从外部执行角度表达式 角度框架。 (例如,来自浏览器DOM事件, setTimeout,XHR或第三方库)。因为我们正在呼唤 我们需要执行适当范围生命周期的角度框架 异常处理,执行手表。
该文档还提供了它的伪代码:
function $apply(expr) {
try {
return $eval(expr);
} catch (e) {
$exceptionHandler(e);
} finally {
$root.$digest();
}
}
简而言之,$apply
计算表达式并触发摘要周期,使Angular执行所有已注册的监听侦听器并更新任何视图绑定。
最后,您已经说过,您一直在使用$apply
更新模型的绑定,但只有在更新来自Angular之外时才需要。在大多数情况下,您无需手动调用它。