Answers:
您需要使用表单名称以及ng-disabled:这是Plunker上的演示
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid">Save</button>
</form>
<div ng-form="myForm"> ... stuff here .. </div>
。虽然,如果您要从输入中提交值,则在按钮按下时,我强烈建议您使用<form/>
标签,如果没有其他原因,它允许用户点击[ENTER]并提交表单。但是由于诸如可访问性之类的问题,它也可能构成更好的实践。
要添加到此答案。我刚刚发现,如果您在表单名称中使用连字符(Angular 1.3),它也会崩溃:
因此,这将不工作:
<form name="my-form">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="my-form.$invalid">Save</button>
</form>
myForm.$invalid
应该仍然可以使用,因此对于您的情况,我认为my_formset_name0.$invalid
应该可以使用。
选定的响应是正确的,但是像我这样的人可能会对向服务器端发送请求的异步验证存在问题-在给定的请求处理期间不会禁用按钮,因此按钮会闪烁,这对用户来说很奇怪。
要使此无效,您只需要处理表单的$ pending状态:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid || myForm.$pending">Save</button>
</form>
!myForm.$valid
它来处理异步待处理问题。itnext.io/valid-and-invalid-in-angular-forms-61cfa3f2a0cd
如果您使用的是反应式表格,则可以使用以下方法:
<button [disabled]="!contactForm.valid" type="submit" class="btn btn-lg btn primary" (click)="printSomething()">Submit</button>
(click)
并且[disabled]
不是有效的AngularJS代码,也不是Reactive Forms属于AngularJS框架的一部分。 “ Angular是今天和明天的Angular的名称 。AngularJS
我们可以创建一个简单的指令并禁用按钮,直到所有必填字段均已填写。
angular.module('sampleapp').directive('disableBtn',
function() {
return {
restrict : 'A',
link : function(scope, element, attrs) {
var $el = $(element);
var submitBtn = $el.find('button[type="submit"]');
var _name = attrs.name;
scope.$watch(_name + '.$valid', function(val) {
if (val) {
submitBtn.removeAttr('disabled');
} else {
submitBtn.attr('disabled', 'disabled');
}
});
}
};
}
);
ng-disabled
在angular 1.x和[disabled]
angular 2 | 4.x中有本机指令比这要好得多的测试时,为什么还要这样做呢?其次,为什么要有一个范围限定为禁用嵌套按钮的表单的指令,它是超级特定的。一个糟糕的思想解决方案IMO。
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required/>
<button ng-disabled="myForm.$pristine|| myForm.$invalid">Save</button>
</form>
如果你想更严格一点