Ok, então talvez isso não esteja claro. Obtenha este formulário:
<form (ngSubmit)="submit()" #crisisForm="ngForm">
<input type="text" name="name" [(ngModel)]="crisis.name">
<button type="submit">Submit</button>
<button type="button" (click)="preview()">Preview</button>
<button type="reset" (click)="reset()">Reset</button>
</form>
Por que todos os botões acionam a submit()
função? E como evitar isso?
Respostas:
Vejo duas opções para resolver isso:
1) Especifique type = "button" explicitamente (acho que é mais preferível ):
De acordo com a especificação W3:
2) Use
$event.preventDefault()
:ou
fonte
(click)="preview(); false"
deve fazer o mesmo. Por exemplostopPropagation()
, precisaria ser chamado explicitamente, mas se um manipulador de eventos retornarfalse
,preventDefault
será chamado no evento.return false
e não funcionou :)return
provavelmente não é permitido em expressões de ligação, mas o valor da última expressão é retornado implicitamente.type=button
as especificações do W3C. Obrigado!!Este Plunker sugere o contrário, cada botão parece funcionar como pretendido.
No entanto, para evitar o comportamento padrão do formulário, você pode fazer isso,
TS:
Modelo:
fonte
Descobri que com a versão 2.0
(ngSubmit)
está passando umnull
valor de evento para o método, então, em vez disso, você deve(submit)
seu arquivo .ts
fonte
Defina type = "button" no botão que você não deseja enviar.
fonte
Eu tenho o mesmo problema. A solução que encontrei foi substituir
button
pora
e aplicar o estilo do botão ao elemento âncora:fonte
Você deve importar FormsModule de '@ angular / forms' em seu app.module.ts
fonte