一尘不染

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

angularjs

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

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

但是通过使用

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

没发生什么事…

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


阅读 226

收藏
2020-07-04

共1个答案

一尘不染

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

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

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

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

2020-07-04