在提交时,AngularJS在$submitted
上设置FormController
并将类ng-submitted
添加到表单中。很好,我可以添加
ng-disabled="myForm.$submitted || myForm.$invalid || maybeAnotherCondition"
到“提交”按钮,并禁用所有输入(因为在通话返回之前没有必要重新提交或编辑任何内容)。输入可能应该在 call 返回后立即重新启用,并且随后的第一个输入更改上的提交按钮...
有很多事情要做,在我开始之前,我想知道,是否已经有某种模式或指令来完成所有这些工作?我可以想像有
FormService.manage(form, onSubmit, onSuccess, onFailure)
在这三个功能中,每个功能都只能完成特定工作,而上述样板文件则一无所有。
最佳答案
如果要一次禁用所有输入字段,建议您使用<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>