将AngularJS应用程序从v1.2.9迁移到v1.6.9之后,每当我单击任何下拉选项时,开发人员控制台都会显示错误消息
“错误:[$ rootScope:inprog] $ apply已在执行中”
我尝试使用$ timeout解决方案,它在某些情况下(使用$ apply)解决了该问题。但是,当我单击下拉选项时,会发生此特定问题。我没有在代码中的任何地方调用$ apply。我也尝试在select标签中使用ng-options,但是问题仍然存在。
Select tag that gives issue:
<select name="task" id="task" ng-model="search.task">
<option data-ng-repeat="each in taskList" value="{{each.id}}"
ng-selected="each.id==search.task">
{{each.taskName}}
</option>
</select>
Code changes after using ng-options:
<select ng-model="search.task" ng-options="each for each in taskList">
<option value="">Task Type</option>
</select>
Please follow link for complete error stack
错误:[$ rootScope:inprog] $ apply已在进行中 http://errors.angularjs.org/1.6.9/$rootScope/inprog?p0=%24apply
如何解决此错误?任何帮助/指针都将不胜感激。
答案 0 :(得分:0)
ngSelected
与ngModel
一起使用 1 <select name="task" id="task" ng-model="search.task">
<option data-ng-repeat="each in taskList" value="{{each.id}}"
̶n̶g̶-̶s̶e̶l̶e̶c̶t̶e̶d̶=̶"̶e̶a̶c̶h̶.̶i̶d̶=̶=̶s̶e̶a̶r̶c̶h̶.̶t̶a̶s̶k̶"̶ >
{{each.taskName}}
</option>
</select>
从文档中:
注意:
ngSelected
不与select
和ngModel
伪指令交互,它仅在元素上设置selected
属性。如果您在选择项上使用ngModel
,则不应在选项上使用ngSelected
,因为ngModel
将设置选择值和所选选项。
查看其他文档:
请参阅Stackoverflow:
$rootScope:inprog
动作已在进行中 2 当您收到此错误时,诊断问题原因可能相当艰巨。最好的措施是调查错误中的堆栈跟踪。您需要查找已调用$apply
或$digest
的地方,并找到发生这种情况的上下文。
应该打两个电话:
第一个调用是良好的$apply
/ $digest
,通常会被调用堆栈顶部附近的某个事件触发。
第二个呼叫是错误的$apply
/ $digest
,这是要调查的那个。
确定了此调用后,便会逐步向上查看问题所在。
如果在您的应用程序代码中进行了第二次调用,那么您应该查看为什么从$apply
/ $digest
中调用此代码的原因。这可能是一个简单的疏忽,或者可能与前面所述的同步/异步情况相符。
如果第二次调用是在AngularJS指令内进行的,则很可能与前面描述的第二个编程事件触发方案相匹配。在这种情况下,您可能需要进一步向上看树,以首先发现触发事件的原因。
有关更多信息,请参见AngularJS Error Reference - $rootScope/inprog - Diagnosing This Error
另请参阅