Answers:
scope.$digest()
将会在当前范围及其所有子级上触发监视程序。scope.$apply
将评估传递的函数并运行$rootScope.$digest()
。
第一个更快,因为它需要评估观察者的当前范围及其子级。第二个比较慢,因为它需要评估观察者$rootScope
及其所有子作用域。
当其中一个观察者发生错误并且您使用时scope.$digest
,不会通过$exceptionHandler
服务进行处理,因此您需要自己处理异常。scope.$apply
在try-catch
内部使用块并将所有异常传递到$exceptionHandler
。
$digest
不仅会在当前范围内触发监视者,还会在其所有子级上触发。
正如文档本身所提到的,您每次执行$ digest循环时都会执行$scope.$apply
。根据有关范围的开发人员指南
计算表达式后,$ apply方法执行$ digest。在$ digest阶段,范围将检查所有$ watch表达式并将它们与先前的值进行比较。
并根据Scope API 文档
通常,您不直接在控制器或指令中调用$ digest()。相反,对$ apply()的调用(通常从指令内部)将强制$ digest()。
因此,您不应显式调用$digest
,而调用$apply
方法将触发摘要循环。
$digest
还可以在示波器的孩子叫什么名字?