Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “$scope.$apply()不是';在这个反模式中,调用堆栈中的值不够高_Javascript_Angularjs - Fatal编程技术网

Javascript “$scope.$apply()不是';在这个反模式中,调用堆栈中的值不够高

Javascript “$scope.$apply()不是';在这个反模式中,调用堆栈中的值不够高,javascript,angularjs,Javascript,Angularjs,我正在阅读这篇介绍反模式的文档,其中包括以下内容: 如果(!$scope.$$phase)$scope.$apply(),则不要执行,这意味着您的$scope.$apply()在调用堆栈中不够高。谁能解释一下这是什么意思 我特别感兴趣的是调用堆栈中的不够高。我知道什么是$$phase和$apply以及为什么使用它。如果在堆栈中看到范围不够高的示例,那就太好了。这意味着您可以看到代码中的某个地方(!$scope.$$phase)$scope.$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