Como desativar o botão 'enviar'?

127

Como desativar o botão "Enviar" até que o formulário seja válido?

Angular2 tem um equivalente a ng-desativado que pode ser usado no botão Enviar? (ng-disabled não funciona para mim.)

Bonneville
fonte
1
somente quando você usa a validação imediata, por exemplo, ao digitar. Não faça isso .. apenas com um bom pensamento ou validação assíncrona, que depende de um back-end, por exemplo.
Sam Vloeberghs 25/03

Respostas:

243

Como visto neste exemplo angular , há uma maneira de desativar um botão até que todo o formulário seja válido:

<button type="submit" [disabled]="!ngForm.valid">Submit</button>
Universidade Angular
fonte
como obter valor do rádio e da caixa de seleção usando o formBuilder?
Pardeep Jain
O link referido possui sintaxe antiga para angular2, por exemplo ng-form-modal. peça a ele para atualizar o thanx.
precisa
Confira este exemplo, a sintaxe está atualizada -> blog.jhades.org/…
Angular University
1
como você pode validar um formulário se desativar o botão enviar (a menos que você faça isso no fluxo, mas eu nem sempre gosto disso)? Por favor, esteja ciente das preocupações de
experiência do usuário
6
[disabled] = "ngForm.invalid" você também pode verificar
shaunak1111 3/17/17
47

em Angular 2.xx , 4 , 5 ...

<form #loginForm="ngForm">
    <input type="text" required> 
    <button  type="submit"  [disabled]="loginForm.form.invalid">Submit</button>
</form>
Bougarfaoui El houcine
fonte
7

.html

<form [formGroup]="contactForm">

<button [disabled]="contactForm.invalid"  (click)="onSubmit()">SEND</button>

.ts

contactForm: FormGroup;
alvic
fonte
Embora esse código possa responder à pergunta, fornecer um contexto adicional sobre como e / ou por que resolve o problema melhoraria o valor a longo prazo da resposta.
Nic3500
5

Aqui está um exemplo de trabalho (você terá que confiar em mim que existe um método submit () no controlador - ele imprime um objeto, como {user: 'abc'} se 'abc' for inserido no campo de entrada):

<form #loginForm="ngForm" (ngSubmit)="submit(loginForm.value)">
    <input type="text" name="user" ngModel required>
    <button  type="submit"  [disabled]="loginForm.invalid">
        Submit
    </button>
</form>

Como você pode ver:

  • não use loginForm.form, apenas use loginForm
  • loginForm.invalid funciona tão bem quanto! loginForm.valid
  • se você quiser enviar () os valores corretos, o elemento de entrada deve ter atributos name e ngModel

Além disso, é nesse momento que você NÃO está usando o novo FormBuilder, que eu recomendo. As coisas são muito diferentes ao usar o FormBuilder.

John Deighan
fonte
4

A validação de formulário é bastante direta no Angular 2

Aqui está um exemplo,

<form (ngSubmit)="onSubmit()" #myForm="ngForm">

 <div class="form-group">
  <label for="firstname">First Name</label>
  <input type="text" class="form-control" id="firstname" 
   required [(ngModel)]="firstname" name="firstname">
 </div>

 <div class="form-group">
  <label for="middlename">Middle Name</label>
  <input type="text"  class="form-control" id="middlename" 
   [(ngModel)]="middlename" name="middlename">
 </div>

 <div class="form-group">
  <label for="lastname">Last Name</label>
  <input type="text"  class="form-control" id="lastname" 
   required minlength = '2' maxlength="6" [(ngModel)] = "lastname" name="lastname">
 </div>

 <div class="form-group">
  <label for="mobnumber">Mob Number</label>
  <input type="text"  class="form-control" id="mobnumber"  
   minlength = '2' maxlength="10" pattern="^[0-9()\-+\s]+$" 
   [(ngModel)] = "mobnumber" name="mobnumber">
 </div>

 <button type="submit" [disabled]="!myForm.form.valid">Submit</button>

</form>

Verifique este plunker para demonstração

Mais informações

Prashobh
fonte
2

É importante que você inclua a palavra-chave " necessária " em cada uma de suas tags de entrada obrigatórias para que ela funcione.

 <form (ngSubmit)="login(loginForm.value)" #loginForm="ngForm">
    ...
    <input ngModel required name="username" id="userName" type="text" class="form-control" placeholder="User Name..." />
    <button type="submit" [disabled]="loginForm.invalid" class="btn btn-primary">Login</button>
Emir Memic
fonte
0

Pode estar abaixo do código pode ajudar:

<button type="submit" [attr.disabled]="!ngForm.valid ? true : null">Submit</button>
Shivang Gupta
fonte
0

Isso funcionou para mim.

.ts

newForm : FormGroup;

.html

<input type="button" [disabled]="newForm.invalid" />
bereket gebredingle
fonte