当我在模型中的一个属性改变时,我正在尝试发送一个表单(使用一个指令)(所以我观察该属性),但是当我触发submit事件时,我会收到错误:“Error:[$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循环运行(显然是看一个).所以你应该等到完成之后才能在下一个事件中提起事件.您可以为此提供$timeout服务:
app.directive("autoSubmit",function($timeout) { return { link: function(scope,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,function() { if (scope.valid == 1) { console.log("send form"); var submitHandler = $parse(attrs.ngSubmit)(scope); if (submitHandler) { submitHandler(); } } }); } } });