Javascript “$scope.$apply()不是';在这个反模式中,调用堆栈中的值不够高
我正在阅读这篇介绍反模式的文档,其中包括以下内容: 如果(!$scope.$$phase)$scope.$apply(),则不要执行Javascript “$scope.$apply()不是';在这个反模式中,调用堆栈中的值不够高,javascript,angularjs,Javascript,Angularjs,我正在阅读这篇介绍反模式的文档,其中包括以下内容: 如果(!$scope.$$phase)$scope.$apply(),则不要执行,这意味着您的$scope.$apply()在调用堆栈中不够高。谁能解释一下这是什么意思 我特别感兴趣的是调用堆栈中的不够高。我知道什么是$$phase和$apply以及为什么使用它。如果在堆栈中看到范围不够高的示例,那就太好了。这意味着您可以看到代码中的某个地方(!$scope.$$phase)$scope.$apply()是否有问题。因为在最佳情况下,您不需要检
,这意味着您的$scope.$apply()
在调用堆栈中不够高。谁能解释一下这是什么意思
我特别感兴趣的是调用堆栈中的不够高。我知道什么是$$phase
和$apply
以及为什么使用它。如果在堆栈中看到范围不够高的示例,那就太好了。这意味着您可以看到代码中的某个地方(!$scope.$$phase)$scope.$apply()是否有问题。因为在最佳情况下,您不需要检查$scpoe.$$phase$$相位是angular在内部使用的属性,不应在应用程序代码中使用$$phase是一个基本的布尔属性,表示$digest循环已经在进行(angular使用它来检查模型更新)。如果您调用$apply,则告诉angular开始$digest阶段(检查模型更新)。只有当您想在angular代码之外更新模型时(例如在jquery插件回调上),才必须手动执行此操作
如果您想从内部了解angular,我建议您阅读这篇很棒的文章:调用堆栈是由某个函数进行的调用链,就像您在出现javascript错误时在控制台中看到的一样。
比如说
at Scope.$scope.openRightMenu (site/header.ctr.js:19:12)
at Parser.functionCall (site/bower_components/angular/angular.js:10567:21)
at site/bower_components/angular-touch/angular-touch.js:438:9
at Scope.$get.Scope.$eval (site/bower_components/angular/angular.js:12412:28)
at Scope.$get.Scope.$apply (site/bower_components/angular/angular.js:12510:23)
at HTMLDivElement.<anonymous> (site/bower_components/angular-touch/angular-touch.js:437:13)
$apply()调用应该位于func a()内部,这是调用堆栈的最高级别 谢谢,我对调用堆栈中的不够高的部分感兴趣。(我所知道的一切)
func a() -> calling -> func b() //setting $scope elaborated data
func b() -> calling -> func c() //elaborating data
func c() -> calling -> func d() //getting data