您可以在form 上设置ng-submit 指令,当您单击提交按钮时,它会调用ng-submit 指令中提到的方法。
标记
<form name="myForm" ng-submit="submit()">
<input name="name" type="text" ng-model="name"/>
<button>Save Draft</button>
<button type="submit">Submit</button>
<form>
在这里阅读how form work in AngularJS?
更新 1
如果您想验证按钮 click,但将其类型设置为 button 本身,则使用 ng-click 指令如下所示
标记
<form name="myForm" ng-submit="submit()">
<input name="name" type="text" ng-model="name"/>
<button type="button" ng-click="manualSubmit()">Save Draft</button>
<button type="submit">Submit</button>
<form>
代码
$scope.manualSubmit = function(){
//do your the process of adding hidden fields.
//then submit a form
//if you don't want to submit on some cases then put it in condition block
$('form').submit(); // this will submit form
}
但从技术上讲,我不喜欢使用 jQuery 和 make 这种方法
问题 Angular 摘要循环。
如果您真的想在表单中添加hidden 字段,那么我会将它们保留在form 本身上,而不是在提交表单之前动态添加它们。并将使用ng-submit 指令。
要填充这些隐藏值,您可以使用 ng-value 指令,其中包含范围变量。 ng-value 指令所做的是,它将更新那些隐藏字段,假设 scopeVariable 值从控制器更改将更新隐藏字段值。
<form name="myForm" ng-submit="submit()">
<input name="name" type="text" ng-model="name"/>
<input type="hidden" name="somehiddenfield" ng-value="scopeVariable"/>
<button>Save Draft</button>
<button type="submit">Submit</button>
<form>
更新 2
根据评论,您想使用 Angular 手动提交表单,因为您可以设置指令来提交 form。在这种情况下,您不需要 ng-submit。
标记
<button type="button" my-submit="callback()">Save Draft</button>
指令
app.directive('mySubmit', function(){
return {
restrict: 'A',
link: function(scope, element, attrs){
element.on('click', function(event){
//do stuff before submitting
element.parent.submit(); //manually submitting form using angular
if(attrs.callback)
scope.$eval(attrs.callback);
})
}
}
})
Update 2 Plunkr