Ok, tal vez esto no esté claro. Obtenga este formulario:
<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 qué todos los botones activan la submit()
función? ¿Y cómo evitarlo?
Respuestas:
Veo dos opciones para solucionarlo:
1) Especifique type = "button" explícitamente (creo que es más preferible ):
Según la especificación W3:
2) Uso
$event.preventDefault()
:o
fuente
(click)="preview(); false"
debería hacer lo mismo. Por ejemplo,stopPropagation()
sería necesario llamarlo explícitamente, pero si un controlador de eventos regresafalse
, entoncespreventDefault
se llama en el evento.return false
y no funcionó :)return
Probablemente no esté permitido en expresiones vinculantes, pero el valor de la última expresión se devuelve implícitamente.type=button
las especificaciones del W3C. ¡¡Gracias!!Este Plunker sugiere lo contrario, todos los botones parecen funcionar según lo previsto.
Sin embargo, para evitar el comportamiento predeterminado del formulario, puede hacer esto,
TS:
Modelo:
fuente
Descubrí que con la versión 2.0
(ngSubmit)
se pasa unnull
valor de evento al método, por lo que debería(submit)
su archivo .ts
fuente
Establezca type = "button" en el botón que no desea ejecutar enviar.
fuente
Tengo el mismo problema. El trabajo en torno a lo que encontré fue la sustitución
button
cona
y aplicar estilo de botón de elemento de anclaje:fuente
Tienes que importar FormsModule desde '@ angular / forms' en tu app.module.ts
fuente