Si dovrebbe sfruttare la direttiva NgSubmit
, come descritto di seguito:
<form (ngSubmit)="onSubmit()" #heroForm="ngForm">
(...)
<input type="text" [(ngModel)]="data.name"/>
(...)
<button type="submit">Send</button>
</form>
In questo caso, quando si fa clic sul pulsante di invio, il metodo della onSubmit
verrà chiamato il componente e sarà possibile inviare manualmente i dati al server utilizzando la classe HTTP
su Angular2:
@Component({
})
export class MyComponent {
constructor(private http:Http) {
this.data = {
name: 'some name'
(...)
};
}
onSubmit() {
this.http.post('http://someurl', JSON.stringify(this.data))
.subscribe(...);
}
}
In questo modo è possibile rimanere nella stessa pagina.
Modifica
Seguendo il tuo commento, è necessario disattivare il comportamento della direttiva NgForm
che cattura l'evento submit
e impedisce che venga propagato. Vedi questa riga: https://github.com/angular/angular/blob/master/modules/%40angular/forms/src/directives/ng_form.ts#L141.
Per fare che è sufficiente aggiungere l'attributo ngNoForm
al modulo:
<form ngNoForm action="https://www.google.com" target="_blank" method="POST">
<input name="q" value="test">
<button type="submit">Search</button>
</form>
In questo caso, una nuova finestra sarà aperta per vostro modulo di presentazione.
Spero che ti aiuta, Thierry
fonte
2016-01-17 09:30:53
La registrazione di un modulo causa direttamente il ricaricamento di una pagina, che di solito non è ciò che si desidera in un'applicazione Angolare (SPA). Prendi i dati dal modulo e invia una richiesta HTTP dal tuo codice al server. –
Con 'target =" _ blank "' il post dovrebbe essere in una nuova pagina. E l'azione in realtà punta a un dominio diverso, quindi xhr non è un'opzione. –
Vedo. Hai ragione. –