2016-06-27 42 views

risposta

29

scoperto come farlo:

  • grilletto presentare con <formname>.ngSubmit.emit()
  • ottenere lo stato modulo con <formname>.form.valid

Esempio:

<form (ngSubmit)="save()" #documentEditForm="ngForm"> 
... 
</form> 

<button class="btn-save button primary" 
(click)="documentEditForm.ngSubmit.emit()" 
[disabled]="!documentEditForm.form.valid">SAVE</button> 
+0

ngSubmit non è definito –

+1

@VievChild ('documentEditForm') documentEditForm: FormGroupDi rettiva; anche necessario –

+2

Se chiamo emettere allora anche la mia submission (proprietà booleana) del mio ngForm non è cambiata in true. Puoi aiutare per favore. –

36

Il modo corretto di fare è in realtà

<form (ngSubmit)="save()" id="ngForm" #documentEditForm="ngForm"> 
    ... 
</form> 

<button class="btn-save button primary" form="ngForm" [disabled]="!documentEditForm.form.valid"> 
    SAVE 
</button> 

La forma deve avere un ID id="example-form" e il pulsante di invio di un ID corrispondente nel form="example-form"

+6

Questa dovrebbe essere la risposta accettata. – choxnox

+2

Voglio solo aggiungere un'altra cosa. Sembra che l'angolare non si preoccupi del fatto che il pulsante venga disattivato una volta che si trova all'esterno del modulo, ovvero se si preme Invio su un elemento di input, esso tenterà comunque di inviarlo. Non sono sicuro se questo è davvero un bug in Angular stesso o c'è un'altra soluzione. Una soluzione rapida sarebbe solo andare (ngSubmit) = "form.valid && save()" – Yodacheese

+1

fyi IE & Edge non supportano l'attributo 'form' sul 'pulsante', quindi questo non funzionerà lì (per quanto ne so). – BOb

1

Un trucco che ha funzionato per me usando

  • forme reattive
  • Angular2
  • incl. IE

è stato questo:

<!-- real button will simulate click on invisible button (cf. form) --> 
<button onclick="document.getElementById('hiddenSaveButtonForMicrosoftWithLove').click()"> 
    The Real Button outside forms 
</button> 

<form> 
    <!-- will be called in the background and is never visible --> 
    <button id="hiddenSaveButtonForMicrosoftWithLove" type="submit" style="display: none;">hiddenSaveButtonForMicrosoftWithLove</button> 
</form> 
1

Se si utilizzano moduli reattivi utilizzare la proprietà non valida formGroup per disabilitare il pulsante di invio:

<button 
    form="ngForm" 
    [disabled]=" editor.invalid>Enviar</button> 

...

<form [formGroup]="editor" id="ngForm" (ngSubmit)="save()" novalidate > 
... 
</form> 
Problemi correlati