Eu tenho meu formulário como este:
<form name="myForm">
<input name="myText" type="text" ng-model="mytext" required />
<button disabled="{{ myForm.$invalid }}">Save</button>
</form>
Como você pode ver, o botão será desativado se a entrada estiver vazia, mas não voltará a ser ativada quando contiver texto. Como posso fazer isso funcionar?
Respostas:
Você precisa usar o nome do seu formulário e o ng-disabled: Aqui está uma demonstração do Plunker
fonte
<div ng-form="myForm"> ... stuff here .. </div>
. Embora, se você está enviando um valor de insumos, no botão push, eu altamente recomendo usar um<form/>
tag, se por nenhuma outra razão do que permite que um usuário hit [ENTER] e enviar o formulário. Mas também provavelmente constitui uma prática melhor devido a questões como acessibilidade.Para adicionar a esta resposta. Acabei de descobrir que ele também será quebrado se você usar um hífen no nome do seu formulário (Angular 1.3):
Portanto, isso não vai funcionar:
fonte
myForm.$invalid
que ainda deve funcionar, portanto, no seu caso, acho quemy_formset_name0.$invalid
deveria funcionar.A resposta selecionada está correta, mas alguém como eu pode ter problemas com a validação assíncrona com o envio de solicitação para o lado do servidor - o botão não será desativado durante o processamento da solicitação, portanto o botão piscará, o que parece bastante estranho para os usuários.
Para anular isso, você só precisa manipular o estado $ pendente do formulário:
fonte
!myForm.$valid
que lida com problemas pendentes assíncronos também. itnext.io/valid-and-invalid-in-angular-forms-61cfa3f2a0cdSe você estiver usando Formulários Reativos, poderá usar este:
fonte
(click)
e[disabled]
não são códigos AngularJS válidos, nem o Reactive Forms faz parte da estrutura do AngularJS. "Angular é o nome para o angular de hoje e amanhã AngularJS é o nome para todas as versões v1.x de Angular." Angular.io/guide/ajs-quick-referencePodemos criar uma diretiva simples e desativar o botão até que todos os campos obrigatórios sejam preenchidos.
Para mais informações clique aqui
fonte
ng-disabled
no angular 1.xe[disabled]
no angular 2 | 4.x que são muito melhores testadas que isso ?. Em segundo lugar, por que uma diretiva tem como escopo um formulário para desativar um botão aninhado, é super específica. Uma solução mal pensada IMO.Se você quer ser um pouco mais rigoroso
fonte