Je travaille sur des formulaires réactifs dans angular 7 et je dois appeler submit à partir d'un bouton en dehors du formulaire.
<input type="button" form="ngForm" class='Button' value="Save" (click)="detailForm.ngSubmit.emit('Save')" /> <input type="button" form="ngForm" class='Button' value="Update" (click)="detailForm.ngSubmit.emit('Update')" /> <form [formGroup]="gDetailForm" (ngSubmit)="onSubmit(flag)" > </form>
Cette fonction fonctionne correctement.
Maintenant, je dois soumettre le formulaire à partir de plusieurs boutons, c'est-à-dire
Pour cela, je souhaite passer un drapeau 'Enregistrer' ou 'Mettre à jour' de
<input type="button" form="ngForm" class='Button' value="Save" (click)="detailForm.ngSubmit.emit()" /> <form [formGroup]="gDetailForm" (ngSubmit)="onSubmit()" > </form>
Mais je n'ai pas pu soumettre le formulaire avec le ' Enregistrer l'indicateur '/' Mettre à jour '. Comment pourrais-je passer un paramètre des boutons Enregistrer et Mettre à jour en dehors du formulaire à ma fonction d'envoi.
Toute suggestion fructueuse serait très appréciée.
3 Réponses :
Essayez ceci:
HTML:
onSubmit(formValue:any, type:string) { /// your code }
TS:
<button (click)="onSubmit(detailForm.value,'save')">Submit</button> <button (click)="onSubmit(detailForm.value,'update')">Update</button>
Comment pourrais-je identifier Enregistrer / Mettre à jour
Dans ce cas, le formulaire serait marqué comme soumis ou non?
Utilisez type = "submit"
à la place de type = "button"
, ou si vous souhaitez utiliser en dehors du formulaire.
<input type="submit" form="ngForm" (click)="onSubmit(gDetailForm.value, 'save')"/> <input type="submit" form="ngForm" (click)="onSubmit(gDetailForm.value, 'update')"/> <form id="myForm" [formGroup]="gDetailForm"> <input type="text" name="name"/> </form>
p>
Dans votre cas, l'indicateur soumis par le formulaire est toujours faux et d'autres indicateurs tels que invalide, sale, tactile, etc. sont tous définis par défaut.
Essayez ceci, cela fonctionne pour moi:
en HTML:
onSubmit(isPublished: string, formId: any) { console.log(isPublished); //Save or Update if (this.gDetailForm.valid) { // enter code here } }
dans component.ts:
<input type="button" form="ngForm" class='Button' value="Save" (click)="detailForm.ngSubmit.emit('Save')" /> <input type="button" form="ngForm" class='Button' value="Update" (click)="detailForm.ngSubmit.emit('Update')" /> <form [formGroup]="gDetailForm" (ngSubmit)="onSubmit($event, detailForm)" id="ngForm" #detailForm="ngForm"> </form>Démo de travail
Dans votre cas, la validation n'est pas vérifiée.
vérifier avec this.gDetailForm.valid
Je l'ai vérifié en utilisant this.gDetailFirm.invalid mais le problème est que le contrôle invalide n'est pas mis en évidence, c'est-à-dire msg d'erreur sous le contrôle ou la bordure rouge du contrôle.
essayez avec devrait être obligatoire
fournir un exemple de stackblitz
Utilisez-vous des formulaires basés sur des modèles ou réactifs? Je ne comprends pas pourquoi vous avez à la fois un
formGroup
et unngForm
. Y a-t-il une raison pour laquelle vous ne pouvez pas simplement appeleronSubmit ()
à partir des boutons, en passant les indicateurs requis?J'utilise des formulaires réactifs et j'ai édité mon code.