Ответ 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
Другим способом является вызов функции 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();
}
}
});
}
}
});