我只想知道火热的使用方法$digest。在控制器内,以下代码可以正常工作,并且在3秒后更新DOM:
$digest
setTimeout(function(){ $scope.$apply(function(){ $scope.name = 'Alice'; }); },3000);
但是通过使用
setTimeout(function(){ $scope.$digest(function(){ $scope.name = 'Alice'; }); },3000);
没发生什么事…
我以为他们做同样的事情。我怎么了?
$apply()并$digest()有一些异同。它们的相似之处在于它们都检查了更改内容并更新了UI并触发了所有观察程序。
$apply()
$digest()
两者之间的区别是它们的调用方式。$digest()被调用而没有任何参数。$apply()具有在执行任何更新之前将要执行的功能。
另一个区别是它们的影响。$digest()将更新当前范围和任何子范围。$apply()将更新每个范围。因此,大部分时间$digest()将是您想要的,并且效率更高。
解释为什么要$apply()使用功能的最终差异是它们如何处理观察程序中的异常。$apply()会将异常传递给$exceptionHandler(内部使用try- catch块),而$digest()将需要您自己处理异常。
$exceptionHandler