ng-submit în AngularJS: Gestionarea trimiterii formularului cu exemplu
⚡ Rezumat inteligent
Funcția ng-submit din AngularJS leagă o funcție de controler la evenimentul de trimitere al unui formular din browser, astfel încât valorile introduse sunt procesate în interiorul controlerului, iar pagina nu se reîncarcă niciodată printr-un POST implicit.
Directiva AngularJS ng-submit
ng-submit directiva din AngularJS este folosită pentru a lega aplicația la evenimentul de trimitere al browserului. Deci în cazul AngularJS la evenimentul de trimitere, puteți efectua o anumită prelucrare în cadrul controlorului însuși și apoi puteți afișa informațiile prelucrate utilizatorului.
Notă privind versiunea: AngularJS 1.x a părăsit perioada de suport pe termen lung pe 31 decembrie 2021, iar echipa de framework confirmă acest lucru. Suportul AngularJS s-a încheiat oficial în ianuarie 2022, deci nu urmează versiuni sau patch-uri de securitate. Fiecare pas și bloc de cod de mai jos este păstrat exact așa cum este scris, ca referință istorică. Lucrările noi aparțin Angular-ului modern, care exprimă aceeași idee ca și (ngSubmit) legat de un FormGroup.
Cum să trimiteți un formular în AngularJS folosind ng-submit
Procesele de trimitere a informațiilor pe o pagină web sunt în mod normal gestionate de evenimentul de trimitere din browserul web. Acest eveniment este utilizat în mod normal pentru a trimite informații pe care utilizatorul le-ar fi putut introduce pe o pagină web către server pentru procesare ulterioară, cum ar fi acreditările de conectare, datele din formular etc. Trimiterea informațiilor se poate face prin cererea GET sau POST.
Să luăm un exemplu de trimitere a formularelor Angular pentru a vedea cum să trimiteți formulare în AngularJS.
În exemplul nostru de trimitere a formularului AngularJS, vom prezenta utilizatorului o casetă de text în care acesta poate introduce subiectul pe care vrea să îl învețe. Pe pagină va exista un buton de trimitere, care, atunci când este apăsat, va adăuga subiectul într-o listă neordonată.
Ilustrația de mai jos traccare curg, de la subiectul tastat în caseta de text, prin butonul Trimite, până la elementul din listă adăugat dedesubt.

Exemplu de trimitere formular AngularJS
Acum, vom vedea un exemplu de trimitere a formularului AngularJS de la Controller folosind directiva ng-submit:
<!DOCTYPE html>
<html>
<head>
<meta chrset="UTF 8">
<title>Event Registration</title>
</head>
<body ng-app="sampleApp">
<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="lib/bootstrap.js"></script>
<script src="lib/bootstrap.css"></script>
<h1> Guru99 Global Event</h1>
<div ng-controller="AngularController">
<form ng-submit="Display()">
Enter which topic you would like to learn
<input type="text" ng-app="sampleApp" ng-model="Topic"><br>
<input type="submit" value="Submit"/>
<ul ng-repeat="topicname in AllTopic">
<li>{{topicname}}</li>
</ul>
</form>
</div>
<script>
var sampleApp = angular.module("sampleApp",[]);
sampleApp.controller("AngularController",function($scope) {
$scope.AllTopic=[];
$scope.Display = function () {
$scope.AllTopic.push($scope.Topic);
}
});
</script>
</body>
</html>
Code Explicaţie:
- Mai întâi declarăm eticheta HTML a formularului nostru, care va conține controlul „casetă text” și „buton de trimitere”, așa cum se arată în exemplul de eveniment de trimitere a formularului Angular. Apoi folosim directiva ng-submit AngularJS pentru a lega funcția „Display()” la formularul nostru. Această funcție va fi definită în controlerul nostru și va fi apelată la trimiterea formularului.
- Avem un control text în care utilizatorul va introduce subiectul pe care vrea să-l învețe. Aceasta va fi legată de o variabilă numită „Subiect” care va fi folosită în controlerul nostru.
- Există butonul normal de trimitere în AngularJS pe care utilizatorul îl va face clic când a intrat în subiectul dorit.
- Am folosit ng-repetă directivă pentru a afișa elementele din listă cu subiectele introduse de utilizator. Directiva ng-repeat trece prin fiecare subiect din matricea „AllTopic” și afișează numele subiectului în consecință.
- În controlerul nostru, declarăm o variabilă de tip matrice numită „AllTopic”. Aceasta va fi utilizată pentru a conține toate subiectele introduse de utilizator în Pasul 2.
- Definim codul pentru funcția noastră Display(), care va fi apelat ori de câte ori utilizatorul face clic pe butonul Trimitere. Aici folosim funcția push array pentru a adăuga subiectele introduse de utilizator prin variabila „Subiect” în tabloul nostru „AllTopic”.
Dacă exemplul de cod de formular AngularJS este executat cu succes, următoarea ieșire va fi afișată atunci când rulați codul în browser.
ieșire:
Pentru a vedea codul funcționează, mai întâi, introduceți un nume de subiect precum „Angular”, așa cum se arată mai sus în caseta de text, apoi faceți clic pe butonul Trimitere.
- După ce se face clic pe butonul de trimitere, veți vedea articolul care a fost introdus în caseta de text adăugat la lista de articole.
- Acest lucru este realizat de funcția Display(), care este apelată atunci când este apăsat butonul de trimitere.
- Funcția Display() adaugă textul la variabila matrice numită „AllTopic”. Și directiva noastră ng-repeat trece prin fiecare valoare din variabila matrice „AllTopic” și le afișează ca elemente de listă în consecință.
ng-submit vs ng-click: care să folosești
Ambele Directivele AngularJS pot apela aceeași funcție a controlerului, dar ascultă evenimente diferite ale browserului. ng-submit stă pe <form> etichetă și reacționează la evenimentul de trimitere, deci se declanșează și atunci când un utilizator apasă Enter în interiorul unui câmp. ng-click se află pe un buton și reacționează doar la un clic de mouse sau o activare echivalentă.
| Aspect | ng-submit | ng-clic |
|---|---|---|
| Element gazdă | Eticheta formularului | Orice element pe care se poate face clic |
| Eveniment ascultat | trimite, inclusiv tasta Enter | doar clic |
| POST implicit al browserului | Suprimat de directivă | Încă se declanșează de la un buton de trimitere |
| Acces la starea formularului | Citește $valid și $invalid pe controlerul de formular | Fără context de formă propriu |
| Potrivire naturală | Predarea datelor din formular către un controler | Butoane din bara de instrumente, linkuri, declanșatoare modale |
Suportul pentru tastatură decide de obicei alegerea. Un formular conectat cu ng-click ignoră tasta Enter, ceea ce îi frustrează pe utilizatori care completează o casetă de conectare. Reserve ng-click pentru acțiuni care nu sunt trimiteri de formulare, cum ar fi ștergerea unui câmp sau deschiderea unei casete de dialog.
De ce ng-submit împiedică trimiterea implicită a browserului
Un formular HTML simplu reacționează la un eveniment de trimitere prin serializarea câmpurilor sale și solicitarea browserului să încarce o pagină nouă, care elimină fiecare valoare conținută în $scope. ng-submit directiva împiedică acest lucru: apelează preventDefault() pentru tine, deci expresia rulează și pagina curentă rămâne pe loc. Nu $event argument și nu este necesar niciun apel manual.
Suprimarea are o condiție documentată. Conform Trimiteți referința, acțiunea implicită este împiedicată doar atâta timp cât formularul nu conține action, data-action or x-action atribut. Adăugați oricare dintre acestea și browserul navighează ca de obicei după ce handler-ul termină, ceea ce este comportamentul corect pentru un formular randat de server îmbunătățit progresiv și o surpriză în orice alt loc.
Deoarece directiva înghite obiectul evenimentului, citește valorile trimise din proprietățile care ng-model a scris în domeniul de aplicare sau le-a transmis explicit, ca în ng-submit="Display(Topic)".
Cum se validează un formular înainte de rularea ng-submit
Exemplul de mai sus acceptă un subiect gol, deoarece nimic nu verifică mai întâi caseta de text. AngularJS construiește un controler de formular pentru fiecare formular denumit, iar acel controler expune semnalizatoarele necesare pentru a controla trimiterea formularului. Adaugă novalidate deci browserul își lasă propriile bulele HTML5 dezactivate și AngularJS validarea formularului preia.
- Dați formularului o
nameAngularJS publică un controler cu acel nume pe serverul înconjurător. controlor scop. - Adăuga
novalidatela eticheta formularului, astfel încât validarea nativă a browserului să nu stea în cale. - Marcați câmpurile folosind
required,ng-minlength,ng-maxlengthorng-pattern. - Protejați conducătorul cu
$validși transmiteți controlerul de formular astfel încât funcția să poată inspecta câmpuri individuale. - Dezactivați butonul cu
ng-disabledarătând spre$invalid, care oferă feedback vizual imediat.
<form name="topicForm" ng-submit="topicForm.$valid && Display(topicForm)" novalidate> <input type="text" name="Topic" ng-model="Topic" required> <input type="submit" value="Submit" ng-disabled="topicForm.$invalid"> </form>
Două greșeli explică cele mai multe probleme raportate cu acest model:
- Double depunere. Obligatoriu
ng-clickpe butonul de trimitere în timp ceng-submitse află pe formular și rulează handler-ul de două ori, o dată per eveniment. Referința oficială avertizează împotriva combinării celor două handlere, așa că alegeți unul. - Trimiteri neașteptate. Orice buton din interiorul unui formular fără
type="button"declanșează evenimentul de trimitere. Marcați explicit butoanele de anulare și resetare, altfel acestea declanșează și handler-ul.
Păzind pe $valid este o comoditate, nu un control de securitate. Valorile trebuie totuși revalidate pe server înainte de a fi stocate.


