错误:[$rootScope:inprog] $digest已经在进行中
Error: [$rootScope:inprog] $digest already in progress
我正在尝试发送一个表单(使用指令)当模型中的属性发生变化时(所以我观察属性),但是当我触发提交事件时,我得到错误:"错误:[$rootScope:inprog] $digest已经在进行中",我怎么能避免这个错误,这是我的代码:
app.directive("autoSubmit", function(){
return {
link: function(scope, element, attrs){
scope.$watch("valid", function(){
if(scope.valid == 1) {
console.log("send form");
element.triggerHandler("submit");
}
});
}
}
});
结果如下:http://plnkr.co/edit/cosJLkhUEKv55G8uU1Ea(要重现错误,只需将文本框的值更改为1)
提前感谢您的帮助。
问题是,当您尝试触发事件时,已经有一个$digest周期在运行(显然是watch
周期)。因此,您应该简单地等待,直到它完成并在下一个过程中引发该事件。您可以使用$timeout
服务:
app.directive("autoSubmit", function($timeout) {
return {
link: function(scope, element, attrs) {
scope.$watch("valid", function() {
if (scope.valid == 1) {
console.log("send form");
$timeout(function() {
element.triggerHandler('submit');
})
}
});
}
}
});
演示:http://plnkr.co/edit/bRXfi9kFVFICgFUFvtZz?p=preview
另一种方法是使用$parse
服务手动调用ngSubmit
函数:
app.directive("autoSubmit", function($parse) {
return {
link: function(scope, element, attrs) {
scope.$watch("valid", function() {
if (scope.valid == 1) {
console.log("send form");
var submitHandler = $parse(attrs.ngSubmit)(scope);
if (submitHandler) {
submitHandler();
}
}
});
}
}
});
演示:http://plnkr.co/edit/vNI8OwfnxSQJ6tQLpFqZ?p=preview
当你启动一个进程而不杀死它时,你收到的摘要已经在进行中,为了解决这个问题,你必须使用$timeout service杀死进程具体时间后。
相关文章:
- 我可以让我的Ajax调用引起一个“;进行中”;光标
- Angular Apply已经在进行中
- 如何避免$digest正在进行中的错误
- 向按钮发送点击事件时,$apply已在进行中
- $digest已在进行中
- $rootScope:进程操作已在进行中
- 如何调用$scope$apply()仅当它's还没有进行中
- 如何编写 .click 的 JQuery 等效项以进行中键单击
- $digest不久之后$watch定义触发“$apply已经在进行中.“错误
- 如何查找 Angular.js 中已经在进行中的哪一行代码触发器$digest
- infdig 无限$digest表中的循环
- $scope.申请?$digest已经在进行中
- $scope.$watch 没有调用,但$digest已经在进行中
- 由于“$消化已经在进行中”;
- 正在进行中的 Ajax 请求突然开始返回状态 = 0
- 角度变量未更新,尝试调用$apply导致“;摘要已经在进行中”;错误
- 错误:在同一个angular Js函数中使用两个Http请求调用时,$digest已经在进行中
- Angular指令在尝试调用控制器方法时抛出正在进行中的$digest
- 错误:[$rootScope:inprog] $digest已经在进行中
- 避免$watch()循环导致$digest已经在进行中的错误