Ответ 1
Вам нужно использовать имя вашей формы, а также ng-disabled: Вот демо на Plunker
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid">Save</button>
</form>
У меня есть моя форма:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button disabled="{{ myForm.$invalid }}">Save</button>
</form>
Как вы можете видеть, кнопка отключена, если вход пуст, но при включении текста он не возвращается обратно к разрешенному. Как я могу заставить его работать?
Вам нужно использовать имя вашей формы, а также ng-disabled: Вот демо на Plunker
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid">Save</button>
</form>
Чтобы добавить к этому ответу. Я только узнал, что он также сломается, если вы используете дефис в имени своей формы (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>
Выбранный ответ правильный, но у кого-то вроде меня могут возникнуть проблемы с асинхронной проверкой с отправкой запроса на серверную кнопку - кнопка не будет отключена во время обработки заданного запроса, поэтому кнопка будет мигать, что выглядит довольно странно для пользователей.
Чтобы удалить это, вам просто нужно обработать $pending state формы:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button ng-disabled="myForm.$invalid || myForm.$pending">Save</button>
</form>
Мы можем создать простую директиву и отключить кнопку до тех пор, пока не будут заполнены все обязательные поля.
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');
}
});
}
};
}
);
Если вы используете Reactive Forms, вы можете использовать это:
<button [disabled]="!contactForm.valid" type="submit" class="btn btn-lg btn primary" (click)="printSomething()">Submit</button>
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required/>
<button ng-disabled="myForm.$pristine|| myForm.$invalid">Save</button>
</form>