如何使用 AngularJS $submitted?

Posted

技术标签:

【中文标题】如何使用 AngularJS $submitted?【英文标题】:How to use AngularJS $submitted? 【发布时间】:2016-09-26 10:39:23 【问题描述】:

在提交时,AngularJS 在FormController 上设置$submitted 并将ng-submitted 类添加到表单中。很好,我可以添加

ng-disabled="myForm.$submitted || myForm.$invalid || maybeAnotherCondition"

到提交按钮,并禁用所有输入(因为在调用返回之前重新提交或编辑任何内容没有意义)。一旦调用返回并且第一个后续输入更改上的提交按钮,输入可能应该重新启用...

有很多事情要做,在我开始之前,我想知道,是否已经有一些模式甚至是一个指令来做所有这些事情?我可以想象有类似的东西

FormService.manage(form, onSubmit, onSuccess, onFailure)

这三个函数中的每一个都只做特定的工作,而不是上面的样板。

【问题讨论】:

您是否能够禁用单个输入字段并且现在想要禁用所有输入字段? @ShashankAgrawal 我什么都没做,因为我正在寻找一个适用于我所有表单的简单解决方案。我不想用ng-disabled 污染所有输入。使用 fieldset 很有帮助,但我正在寻找更多。 或者,您可以编写一个指令来为您做一些事情,就像我在我的指令之一 github.com/sagrawal14/bootstrap-angular-validation/blob/master/… 中所做的那样,在我的许多表单中应用像 jQuery 这样的全局引导验证,而无需编写任何额外内容。跨度> 【参考方案1】:

如果您想一次禁用所有输入字段,我建议您使用<fieldset>

<form name="myForm" id="myForm" ng-submit="someHandler()">
    <fieldset form="myForm" ng-disabled="myForm.$submitted || myForm.$invalid || maybeAnotherCondition">
        <label>First Name</label>
        <input type="text" name="firstName" data-ng-model="firstName" />

        <label>Last Name</label>
        <input type="text" name="lastName" data-ng-model="lastName" />

        <button type="submit">Submit</button>
    </fieldset>
</form>

禁用fieldset 元素将禁用它的所有子输入元素。请参阅下面的工作示例:

var app = angular.module("sa", []);

app.controller("FooController", function($scope) 

  $scope.submitHandler = function() 
    alert("Form submitted");
  
);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.7/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">


<div ng-app="sa" ng-controller="FooController" class="container">
  <form name="myForm" id="myForm" ng-submit="submitHandler()">
    <fieldset form="myForm" ng-disabled="myForm.$submitted">
      <div class="form-group">
        <label>First Name</label>
        <input type="text" name="firstName" data-ng-model="firstName" class="form-control" />
      </div>

      <div class="form-group">
        <label>Last Name</label>
        <input type="text" name="lastName" data-ng-model="lastName" class="form-control" />
      </div>

      <button type="submit" class="btn btn-primary">
        myForm.$submitted ? 'Submitted' : 'Submit'
      </button>
    </fieldset>
  </form>
</div>

【讨论】:

我喜欢你的回答(因为fieldset 信息和可运行代码),但对我帮助最大的是来自bootstrap.angular.validation 模块的指令。 @maaartinus 哦,太好了!很高兴对您有所帮助。

以上是关于如何使用 AngularJS $submitted?的主要内容,如果未能解决你的问题,请参考以下文章

如何在angularjs上传图像时自动压缩图像

AngularJS 等待提交表单(ng-submit)

如何在AngularJS中大写和大写?

如何使用 AngularJS 使用 Bootstrap 警报

使用 AngularJS 上传文件

Submit form on pressing Enter with AngularJS