我只想知道火热的使用方法$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()
要求您自己处理异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句