我正在尝试当模型中的属性发生更改时发送一个表单(使用指令)(所以我看属性),但是当我触发提交事件时,我收到错误:“错误:[$ 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');
})
}
});
}
}
});
另一种方法是调用 ngSubmit
自己动手使用 $parse
服务:
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();
}
}
});
}
}
});
当你启动一个进程并且不杀死它时你会收到摘要已经在进行中,为了解决这个问题,你必须使用$ timeout服务来杀死进程
在特定时间之后。