【问题标题】:Simple submit form using Angular使用 Angular 的简单提交表单
【发布时间】:2016-02-04 01:54:38
【问题描述】:

我是 Angular 的新手,但在 google 上已经很老了。

我不知道如何使用 Angular 提交此表单,就像我们在 jQuery 中所做的那样。

<form>
   <input type="text" />
   <button type="button" class="saveDraft">Save Draft</button>
   <button type="submit">Submit</button>
<form>

我想通过保存草稿按钮提交此表单,而不是普通的提交按钮。

我们使用的jQuery

$('.saveDraft').click(function () {
    $('form').submit(); // this will submit form 
});

【问题讨论】:

  • 我可以知道你为什么要这样做。你打算在click函数中进行自定义验证吗?
  • 是的,我想在提交表单之前设置隐藏值。

标签: javascript angularjs forms bind angularjs-forms


【解决方案1】:

您可以在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

【讨论】:

  • @Basit 如果你没有在button 上提及type 属性,默认情况下它被认为是submit,但是当你点击Save Draft 时,它会提交带有输入字段
  • 我已删除反对票。但是 $('form').submit() 正在使用 jQuery,我不想仅仅为了提交表单而包含 jquery 库。我们不能从角度做到这一点吗?我只需要设置 $scope.draft = 1;并提交表单..
  • @Basit submit() 到底要做什么..我的action 似乎没有任何action 属性form 所以这不会有任何区别..基本上它会只触发 submit 事件
  • 我的表格很大,我不能在这里粘贴来迷惑别人。这就是为什么我保持它小而简单。普通提交会将值显示给公众,但如果用户想保存为草稿,则他将单击链接或普通按钮,这将更改值并提交表单。我仍然对如何使用 angular 从函数提交表单感到困惑。
  • @Basit 看看我的更新..你在最后第二条评论中说了什么..你需要设置$scope.draft = 1
【解决方案2】:

这里有一个例子:

<form ng-submit="submit()" ng-controller="ExampleController">
  Enter text and hit enter:
  <input type="text" ng-model="text" name="text" />
  <input type="submit" id="submit" value="Submit" />
  <pre>list={{list}}</pre>
</form>

和文档:

https://docs.angularjs.org/api/ng/directive/ngSubmit

【讨论】:

  • 对不起,这不能回答我的问题
【解决方案3】:

你只需用这个替换你的代码

<form name="myForm" ng-submit="submit()" action=" name of other page" autocomplete="on">`

<input name="name" type="text" ng-model="name"/> <button onClick="draft(this.form)">Save Draft</button> <button type="submit" name="submit">Submit</button>

【讨论】:

  • 抱歉,这个怎么能从保存草稿按钮 type=button 提交表单?
  • 你可以像这样传递当前的表单对象....
  • 问题是如何从普通按钮或链接提交表单。
猜你喜欢
  • 2016-09-02
  • 2015-06-02
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
相关资源
最近更新 更多