当前位置: 首页 > 面试题库 >

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

巫马淳
2023-03-14
问题内容

$scope.$apply()当我通过Angular应用中的websocket接收数据时,我一直在使用它来更新模型的绑定。但是它实际上是做什么的,为什么需要调用它才能完成更新?


问题答案:

从Angular文档:

$
apply()用于从角度框架外部以角度执行表达式。(例如,来自浏览器DOM事件,setTimeout,XHR或第三方库)。因为我们正在调用角度框架,所以我们需要执行异常处理的适当范围生命周期,并执行监视。

该文档还提供了它的伪代码:

function $apply(expr) {
  try {
    return $eval(expr);
  } catch (e) {
    $exceptionHandler(e);
  } finally {
    $root.$digest();
  }
}

简而言之,$apply对表达式求值并触发摘要循环,从而使Angular执行所有已注册的手表侦听器并更新任何视图绑定。

最后,您说过您一直在$apply更新模型的绑定,但这仅在更新来自Angular外部时才需要。在大多数情况下,您无需手动调用它。



 类似资料:
  • 问题内容: 有时我需要在代码中使用它,有时它会引发“已消化的摘要”错误。但是,您可以在评论中(以及在Angular Wiki上)阅读: 如果(!$ scope。$$ phase)$ scope。$ apply()不要这样做,这意味着您的$ scope。$ apply()在调用堆栈中不够高。 所以现在我有两个问题: 为什么这是反模式? 我如何安全地使用$ scope。$ apply? 另一个防止“已

  • 有时我需要在代码中使用,有时它会引发“摘要已经在进行中”错误。因此,我开始寻找解决这个问题的方法,并发现这个问题:AngularJS:prevention error$digest在调用$scope.$apply()时已经在进行。然而,在评论中(以及有棱角的wiki上),您可以读到: 如果(!$scope.$$phase)$scope.$apply(),则不要这样做,这意味着您的$scope.$a

  • 问题内容: 我只想知道火热的使用方法。在控制器内,以下代码可以正常工作,并且在3秒后更新DOM: 但是通过使用 没发生什么事… 我以为他们做同样的事情。我怎么了? 问题答案: 并有一些异同。它们的相似之处在于它们都检查了更改内容并更新了UI并触发了所有观察程序。 两者之间的区别是它们的调用方式。被调用而没有任何参数。具有在执行任何更新之前将要执行的功能。 另一个区别是它们的影响。将更新当前范围和任

  • 问题内容: 我想标题很清楚我要问的内容。我创建了这个小提琴:http : //jsfiddle.net/Sourabh_/HB7LU/13142/ 在小提琴中,我试图复制一个场景。这只是一个示例,但是在AJAX调用中,如果我不使用该列表,则不会更新。我想知道每次进行AJAX调用来更新列表时是否可以安全使用?是否可以使用其他机制? 我编写的用于复制场景的代码(与小提琴相同): 的HTML JS 问题

  • 问题内容: 我试图更好地理解在Angular中使用$ timeout服务作为一种“安全$ apply”方法的细微差别。基本上是在可能响应Angular事件或非Angular事件(例如jQuery或某些标准DOM事件)而运行一段代码的场景中。 据我了解: 在$ scope。$ apply中包装代码适用于您尚未处于摘要循环(又称为jQuery事件)的情况,但是如果正在进行摘要则将引发错误 在$ tim

  • 问题内容: 在AngularJS范围内。在每个事件处理程序(输入指令的keydown / input事件,select指令的change事件等)上调用$ apply()。 看小例子。似乎ngRepeat在每次击键时都会重新计算并重绘,尽管事实是另一个作用域发生了更改。 知道这种决定的理由将是很有趣的。 问题答案: 希望有AngularJS的作者来做,但是我相信$ digest()必须在$ root