Como enviar um formulário pressionando a tecla Enter em qualquer campo do formulário em Angular Material?

Sep 09 2020

Desejo enviar o formulário pressionando a tecla Enter sem clicar no botão de atualização, uma vez que qualquer campo é editado e o botão de atualização é habilitado como abaixo na imagem.

Este formulário de atualização é uma caixa de diálogo que abre ao clicar na funcionalidade de edição em uma linha da tabela.

Caso: Agora o formulário está editado no campo Emp Code e está destacado, então ao clicar na tecla Enter este formulário deve ser enviado.

Abaixo está um exemplo de código do formulário de atualização em HTML.

<mat-card-content>
    <form class="example-form" [formGroup]="docForm">
      <table>
        <tr>
          .
          .
          <td>
            <mat-form-field appearance="outline">
              <mat-label>Emp Code</mat-label>
              <input matInput name="empCode" formControlName="empCd" maxLength = "4" >
            </mat-form-field>
          </td>
         .
         .
       </tr>
      </table>
    </form>
</mat-card-content>

<button mat-raised-button style="width: 95px;" color="primary" [disabled]='docForm.invalid || !docForm.dirty (click)="update()"> Update </button>

Tentei alguma abordagem, mas não funcionou como esperado.

 <button mat-raised-button (keyup.enter)="!($event.target.tagName == 'TEXTAREA' || $event.target.tagName == 'BUTTON')" 
  style="width: 95px;" color="primary" [disabled]='docForm.invalid || !docForm.dirty' (click)="update()"> Update </button>

Agradeço desde já toda a ajuda nisto.

Respostas

bryan60 Sep 09 2020 at 22:20

você deve ser capaz de apenas vincular ao ngSubmitevento:

<form class="example-form" [formGroup]="docForm" (ngSubmit)="docForm.valid && docForm.dirty && update()">

para que isso seja acionado, você precisa de um elemento de tipo de envio em algum lugar dentro do seu formulário, mas pode estar oculto:

<input [style.display]="'none'" type="submit">

ou se preferir, você pode apenas vincular ao keyup.enterevento no formulário:

<form class="example-form" [formGroup]="docForm" (keyup.enter)="docForm.valid && docForm.dirty && update()">