Ok alors peut-être que ce n'est pas clair. Obtenez ce formulaire:
<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>
Pourquoi tous les boutons déclenchent-ils la submit()
fonction? Et comment éviter cela?
Réponses:
Je vois deux options pour le résoudre:
1) Spécifiez explicitement type = "button" (je pense que c'est plus préférable ):
Selon la spécification W3:
2) Utilisez
$event.preventDefault()
:ou
la source
(click)="preview(); false"
devrait faire de même. Par exemple,stopPropagation()
il faudrait appeler explicitement, mais si un gestionnaire d'événements retournefalse
, ilpreventDefault
est appelé sur l'événement.return false
et cela n'a pas fonctionné :)return
n'est probablement pas autorisé dans les expressions de liaison mais la valeur de la dernière expression est renvoyée implicitement.type=button
les spécifications du W3C. Je vous remercie!!Ce Plunker suggère le contraire, chaque bouton semble fonctionner comme prévu.
Cependant, pour empêcher le comportement par défaut du formulaire, vous pouvez le faire,
TS:
Modèle:
la source
J'ai trouvé qu'avec la version 2.0,
(ngSubmit)
on passe unenull
valeur d'événement à la méthode, donc à la place, vous devriez nous(submit)
votre fichier .ts
la source
Définissez type = "bouton" dans le bouton que vous ne souhaitez pas exécuter de soumission.
la source
J'ai le même problème. Le travail autour que j'ai trouvé le remplacer
button
aveca
et appliquer le style de bouton à l' élément d'ancrage:la source
Vous devez importer FormsModule depuis '@ angular / forms' dans votre app.module.ts
la source