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

角$ scope。$ digest vs $ scope。$ apply

夏博
2023-03-14
问题内容

我只想知道火热的使用方法$digest。在控制器内,以下代码可以正常工作,并且在3秒后更新DOM:

setTimeout(function(){
    $scope.$apply(function(){
    $scope.name = 'Alice';
    });
},3000);

但是通过使用

setTimeout(function(){
        $scope.$digest(function(){
        $scope.name = 'Alice';
        });
    },3000);

没发生什么事…

我以为他们做同样的事情。我怎么了?


问题答案:

$apply()$digest()有一些异同。它们的相似之处在于它们都检查了更改内容并更新了UI并触发了所有观察程序。

两者之间的区别是它们的调用方式。$digest()被调用而没有任何参数。$apply()具有在执行任何更新之前将要执行的功能。

另一个区别是它们的影响。$digest()将更新当前范围和任何子范围。$apply()将更新每个范围。因此,大部分时间$digest()将是您想要的,并且效率更高。

解释为什么要$apply()使用功能的最终差异是它们如何处理观察程序中的异常。$apply()会将异常传递给$exceptionHandler(内部使用try-
catch块),而$digest()将需要您自己处理异常。



 类似资料:
  • 描述 (Description) 变量范围指定可用变量的位置。 将从本地范围搜索变量,如果它们不可用,则编译器将从父范围进行搜索。 例子 (Example) 以下示例演示了在LESS文件中使用命名空间和访问器 - <html> <head> <title>Less Scope</title> <link rel = "stylesheet" type = "text/

  • Target Scope The target scope configuration lets you tell Burp, at a suite-wide level, exactly what hosts and URLs constitute the target for your current work. You can think of the target scope as, ro

  • Weave Scope - Troubleshooting & Monitoring for Docker & Kubernetes Weave Scope automatically generates a map of your application, enabling you tointuitively understand, monitor, and control your conta

  • 如何使用和方法将对象从一个控制器发送到另一个控制器? 它的工作方式并不像我想的那样。和如何工作?

  • 描述 (Description) 由变量组成的Mixins是可见的,可以在调用者的范围内使用。 但是有一个例外,如果调用者包含一个具有相同名称的变量,那么该变量不会被复制到调用者的作用域中。 只有调用者范围内的变量受到保护,并且重写了继承的变量。 例子 (Example) 以下示例演示了在LESS文件中使用mixin scope - <html> <head> <link rel

  • 任何编程中的范围都是程序的一个区域,其中可以存在已定义的变量,并且不能访问该变量。 有三个地方可以用Go编程语言声明变量 - 在函数或块内( local变量) 所有函数之外( global变量) 在函数参数的定义中( formal参数) 让我们找出什么是local和global变量以及什么是formal参数。 局部变量 (Local Variables) 在函数或块内声明的变量称为局部变量。 它们