$ scope。$ apply()有什么作用?

时间:2013-09-10 03:56:45

标签: javascript angularjs

当我通过Angular应用程序中的websockets接收数据时,我一直在使用$scope.$apply()来更新我的模型的绑定。但它实际上做了什么以及为什么需要调用它来实现更新?

3 个答案:

答案 0 :(得分:4)

如果您致电$apply,则会在angular-context中执行所提供的代码,您可以使用角色提供的代码。

来自link

  

Angular通过提供自己的事件处理循环来修改正常的JavaScript流。这将JavaScript拆分为经典和Angular执行上下文。只有在Angular执行上下文中应用的操作才会受益于Angular数据绑定,异常处理,属性监视等......

enter image description here

  

您还可以使用$ apply()从JavaScript输入Angular执行上下文。请记住,在大多数地方(控制器,服务),已经通过处理事件的指令为您调用了$ apply。只有在实现自定义事件回调或使用第三方库回调时,才需要显式调用$ apply。

答案 1 :(得分:1)

简单地说:

  1. (可选)处理作为参数传递给它的表达式。
  2. 在$ rootScope上调用$ digest()。
  3. 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之外时才需要。在大多数情况下,您无需手动调用它。