2013-06-05 16 views
28

Sto migrando una vecchia pagina html da jQuery a Angular e contiene alcuni moduli della vecchia scuola con <input type="submit">. Quando ho arricchito le mie pagine con la direttiva ng-app, i vecchi moduli hanno smesso di funzionare (voglio dire quando premi i pulsanti submit e poi non succede nulla).Angular.js invia il modulo alla vecchia maniera

Ho cercato questo problema e ho scansionato anche i documenti Angular, ma sembra che nessuno stia inviando più moduli.

Qualsiasi suggerimento su come riportare in vita quelle forme senza troppe battute sarebbe apprezzato.

attualmente la forma ha seguente markup:

<form name="form_upload" method="post" action="" enctype="multipart/form-data"> 
<input type="file" name="file"> 
<input type="submit" name="send" value="Upload"> 
</form> 

Tutto il codice jQuery ho purgato e si è appena con angolare.

UPD:

Credo che ora trovato la causa, è vuota action attributo, a quanto pare l'azione vuoto non è accolto da standarts, ma molto comodo da usare che consente di presentare il modulo per l'URL della pagina corrente, c'è un modo angolare per farlo?

+0

Come si usa per inviare i moduli? Usi jQuery per il lavoro? –

+2

Dovrebbe funzionare, eccetto che l'azione è vuota. Guarda http://plnkr.co/edit/clDeu8NVLCXLh2vojjxp?p = preview –

+0

Sì, è un'azione vuota, grazie per il suggerimento – Dfr

risposta

18

andando fuori dei documenti: http://docs.angularjs.org/api/ng.directive:form

filosofia di angolare è quello di minimizzare i dati e le ricariche della pagina, in modo che non piace "forme vecchia scuola", ma si può aggirare l'ostacolo utilizzando un attributo action nel modulo.

Angular è progettato per le applicazioni a pagina singola e evita il caricamento completo della pagina, poiché ci vorrà più tempo. Utilizzando la direttiva ngSubmit, è possibile definire una funzione da inviare tramite i dati del modulo al server e ottenere una risposta molto più rapida di una ricarica di una pagina intera. Byte anziché Kilobyte.

+7

Una risposta avrebbe anche risposto alla sua domanda. Ho cercato di capire come inviare con un attributo di azione alla pagina in cui ti trovi, quando l'URL è sottoposto a hash perché è un URL per reimpostare la tua password, ad esempio. Ciò che ha funzionato dopo aver tirato fuori alcuni capelli è stato 'action =" # "' – morgs32

+0

ma a volte devi inviarlo in modo tradizionale, ad es. reindirizzamento di facebook. devi ricaricare la pagina. come puoi farlo? – OMGPOP

+0

Un altro esempio è l'integrazione con Symfony e Angular Material. Ti piace il modo symfony di gestire ogni cosa, e un'interfaccia chiara –

0

ho fatto questo. Sono abbastanza sicuro che stavo usando jquery per inviare il modulo, ma probabilmente lo potresti fare con un semplice vecchio javascript.

Uno dei commenti sulla pagina del modulo angolare suggerisce questo:

<input onclick="javascript:$(this).parent().submit();" type="submit" value=""> 

http://docs.angularjs.org/api/ng.directive:form

+1

in plain javascript: this.form.submit(); – Dharmang

+1

Da quando in poi $ (questo) è diventato un vecchio javascript ?? – Red2678

+1

@ Red2678 Ouch. :-) A mia difesa, angular viene fornito con qualcosa che chiamano jQuery lite, quindi se stai usando angular, $ (this) è javascript valido. –

11
  • utilizzare un attributo non vuoto action per rendere angolare inviare il modulo
  • Fill action attributo con posizione attuale (usando angolare)

nel controller:

$scope.location = $window.location.href 

nel codice HTML:

<form action="{{location}}"> 

Vedere le plunkr demo.

+3

Questa è una risposta migliore alla domanda originale. – allenylzhou