从v1.2迁移到v1.6后,从下拉列表中选择一个值时出现“错误:[$ rootScope:inprog] $ apply已在应用中”

时间:2019-05-03 09:31:50

标签: angularjs

将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

如何解决此错误?任何帮助/指针都将不胜感激。

1 个答案:

答案 0 :(得分:0)

请勿将ngSelectedngModel一起使用 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不与selectngModel伪指令交互,它仅在元素上设置selected属性。如果您在选择项上使用ngModel,则不应在选项上使用ngSelected,因为ngModel将设置选择值和所选选项。

     

AngularJS ng-selected Directive API Reference

查看其他文档:

请参阅Stackoverflow:


诊断错误:$rootScope:inprog动作已在进行中 2

当您收到此错误时,诊断问题原因可能相当艰巨。最好的措施是调查错误中的堆栈跟踪。您需要查找已调用$apply$digest的地方,并找到发生这种情况的上下文。

应该打两个电话:

  • 第一个调用是良好的$apply / $digest,通常会被调用堆栈顶部附近的某个事件触发。

  • 第二个呼叫是错误的$apply / $digest,这是要调查的那个。

确定了此调用后,便会逐步向上查看问题所在。

如果在您的应用程序代码中进行了第二次调用,那么您应该查看为什么从$apply / $digest中调用此代码的原因。这可能是一个简单的疏忽,或者可能与前面所述的同步/异步情况相符。

如果第二次调用是在AngularJS指令内进行的,则很可能与前面描述的第二个编程事件触发方案相匹配。在这种情况下,您可能需要进一步向上看树,以首先发现触发事件的原因。

有关更多信息,请参见AngularJS Error Reference - $rootScope/inprog - Diagnosing This Error

另请参阅