从Angular文档:
$apply()用于从角度框架外部以角度执行表达式。(例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。因为我们正在调用角度框架,所以我们需要执行异常处理的适当范围生命周期,并执行监视。
该文档还提供了它的伪代码:
function $apply(expr) { try { return $eval(expr); } catch (e) { $exceptionHandler(e); } finally { $root.$digest(); }}
简而言之,$apply对表达式求值并触发摘要循环,从而使Angular执行所有已注册的手表侦听器并更新任何视图绑定。
最后,您说过您一直在$apply更新模型的绑定,但这仅在更新来自Angular外部时才需要。在大多数情况下,您无需手动调用它。
解决方法$scope.$apply()当我通过Angular应用中的websocket接收数据时,我一直在使用它来更新模型的绑定。但是它实际上是做什么的,为什么需要调用它才能完成更新?