角$ scope$ digest vs $ scope$ apply

【字号: 日期:2024-04-09浏览:36作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决角$ scope$ digest vs $ scope$ apply?

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

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

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

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

解决方法

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

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

但是通过使用

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

没发生什么事…

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

相关文章: