gpt4 book ai didi

javascript - 错误 : [$rootScope:inprog] $digest already in progress

转载 作者:可可西里 更新时间:2023-11-01 02:06:18 28 4
gpt4 key购买 nike

我正在尝试在模型中的属性更改时发送表单(使用指令)(因此我观察属性),但是当我触发提交事件时,我收到错误:“错误:[$rootScope :inprog] $digest already in progress", 我怎样才能避免这个错误,这是我的代码:

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

关于javascript - 错误 : [$rootScope:inprog] $digest already in progress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196722/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com