ng-submit AngularJS-is: vormi esitamise käsitlemine näite abil
⚡ Nutikas kokkuvõte
AngularJS-i ng-submit seob kontrolleri funktsiooni vormi brauseri submit-sündmusega, nii et sisestatud väärtused töödeldakse kontrolleris ja leht ei lae kunagi uuesti vaikimisi POST-i kaudu.
AngularJS ng-submit direktiiv
. ng-submit AngularJS-i direktiivi kasutatakse rakenduse sidumiseks brauseri saatmissündmusega. Nii et juhul AngularJS esitamise sündmusel saate töötlemistoiminguid teostada vastutava töötleja enda sees ja seejärel kuvada töödeldud teavet kasutajale.
Versiooni märkus: AngularJS 1.x lahkus pikaajalisest toest 31. detsembril 2021 ja raamistiku meeskond kinnitab seda AngularJS tugi ametlikult lõppenud jaanuaris 2022, seega ei järgne mingeid väljaandeid ega turvaparandusi. Iga allpool olev samm ja koodiplokk on täpselt nii kirjutatud kui ajalooline viide. Uus töö kuulub tänapäevasesse Angularisse, mis väljendab sama ideed mis (ngSubmit) seotud vormigrupiga.
Kuidas esitada vorm AngularJS-is, kasutades funktsiooni ng-submit
Veebilehe teabe esitamise protsesse käsitleb tavaliselt veebibrauseris esitamise sündmus. Seda sündmust kasutatakse tavaliselt kasutaja poolt veebilehele sisestatud teabe (nt sisselogimismandaadid, vormiandmed jne) saatmiseks serverisse edasiseks töötlemiseks. Teabe edastamine toimub GET- või POST-päringu kaudu.
Võtame Angular vormi esitamise näite, et näha, kuidas AngularJS-is vorme esitada.
Meie AngularJS-i vormi esitamise näites esitame kasutajale tekstikasti, kuhu nad saavad sisestada teema, mida nad soovivad õppida. Lehel on esitamisnupp, millele vajutades lisatakse teema järjestamata nimekirja.
Allolev illustratsioon tracmis liiguvad tekstikasti sisestatud teemast läbi nupu „Esita“ selle alla lisatud loendiüksuseni.

AngularJS vormi esitamise näide
Nüüd näeme näidet AngularJS-vormingust, mis esitatakse kontrollerilt, kasutades käskkirja 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 Selgitus:
- Esmalt deklareerime vormi HTML-sildi, mis sisaldab tekstikasti ja esitamisnuppu, nagu on näidatud Angular-vormi esitamissündmuse näites. Seejärel kasutame ng-submit AngularJS direktiivi, et siduda funktsioon „Display()” meie vormiga. See funktsioon defineeritakse meie kontrolleris ja seda kutsutakse vormi esitamisel.
- Meil on teksti juhtelement, millesse kasutaja sisestab teema, mida ta soovib õppida. See seotakse muutujaga „Teema”, mida kasutatakse meie kontrolleris.
- AngularJS-is on tavaline saatmisnupp, mida kasutaja klõpsab, kui ta on soovitud teema sisestanud.
- Oleme kasutanud ng-korda käsk, et kuvada kasutaja sisestatud teemade loendi üksused. Direktiiv ng-repeat läbib iga teema massiivi 'AllTopic' ja kuvab vastavalt teema nime.
- Meie kontrolleris deklareerime massiivimuutuja nimega 'AllTopic'. Seda kasutatakse kõigi 2. etapis kasutaja sisestatud teemade hoidmiseks.
- Määratleme oma funktsiooni Display() koodi, mida kutsutakse välja iga kord, kui kasutaja klõpsab nuppu Esita. Siin kasutame tõukemassiivi funktsiooni, et lisada kasutaja poolt muutuja 'Teema' kaudu sisestatud teemad meie massiivi 'AllTopic'.
Kui AngularJS-i vormi näidiskood on edukalt käivitatud, kuvatakse koodi brauseris käivitamisel järgmine väljund.
Väljund:
Koodi toimimise nägemiseks sisestage esmalt teema nimi, nagu "nurkne", nagu ülal tekstikastis näidatud, ja seejärel klõpsake nuppu Esita.
- Pärast esitamisnupul klõpsamist näete tekstikasti sisestatud elementi lisatud üksuste loendisse.
- See saavutatakse funktsiooni Display() abil, mida kutsutakse esitamisnupu vajutamisel.
- Funktsioon Display() lisab teksti massiivi muutujale nimega 'AllTopic'. Ja meie ng-repeat direktiiv läbib iga väärtuse massiivimuutujas 'AllTopic' ja kuvab need vastavalt loendiüksustena.
ng-submit vs ng-click: kumba kasutada
Mõlemad AngularJS direktiivid saavad kutsuda sama kontrolleri funktsiooni, kuid nad kuulavad erinevaid brauseri sündmusi. ng-submit istub <form> silt ja reageerib submit-sündmusele, seega käivitub see ka siis, kui kasutaja vajutab väljal sisestusklahvi (Enter). ng-click asub nupul ja reageerib ainult hiireklõpsule või samaväärsele aktiveerimisele.
| Aspekt | ng-submit | ng-klõps |
|---|---|---|
| Host-element | Vormi silt | Mis tahes klõpsatav element |
| Sündmust kuulati | esita, sealhulgas sisestusklahv (Enter) | ainult klõps |
| Vaikimisi brauseri POST | Direktiiv surub maha | Käivitub ikka saatmisnupust |
| Juurdepääs vormi olekule | Loeb vormikontrollerilt väärtused $valid ja $invalid | Omaette vormikonteksti puudumine |
| Loomulik sobivus | Vormiandmete edastamine kontrollerile | Tööriistariba nupud, lingid, modaalsed päästikud |
Tavaliselt määrab valiku klaviatuuri tugi. Juhtmega vorm ng-click üksi ignoreerib sisestusklahvi (Enter), mis tekitab kasutajatel sisselogimiskasti täitmisel frustratsiooni. ng-click toimingute puhul, mis ei ole vormi esitamised, näiteks välja tühjendamine või dialoogi avamine.
Miks ng-submit takistab vaikimisi brauseri esitamist?
Lihtne HTML-vorm reageerib submit-sündmusele oma väljade serialiseerimisega ja palub brauseril laadida uus leht, mis kustutab kõik vormis olevad väärtused. $scope. ng-submit direktiiv takistab selle toimumist: see kutsub üles preventDefault() sinu jaoks, nii et avaldis käivitub ja praegune leht jääb paigale. Ei $event argumenti ja käsitsi kutsumist pole vaja.
Summutamisel on üks dokumenteeritud tingimus. Vastavalt Esita viide, vaikimisi toiming on keelatud ainult siis, kui vormil puudub action, data-action or x-action atribuut. Lisage ükskõik milline neist ja brauser navigeerib pärast käitleja lõpetamist tavapäraselt, mis on korrektne käitumine järk-järgult täiustatud serveri poolt renderdatud vormi puhul ja üllatus kõikjal mujal.
Kuna direktiiv neelab sündmuseobjekti, loe esitatud väärtused omadustest, mis ng-mudel kirjutas ulatusse või edastas need selgesõnaliselt, nagu näiteks ng-submit="Display(Topic)".
Kuidas vormi enne ng-submit käivitamist valideerida
Ülaltoodud näide aktsepteerib tühja teemat, kuna miski ei kontrolli esmalt tekstikasti. AngularJS loob iga nimega vormi jaoks vormikontrolleri ja see kontroller kuvab esitamise suunamiseks vajalikud lipud. novalidate seega jätab brauser oma HTML5 mullid välja lülitatuks ja AngularJS vormi valideerimine võtab üle.
- Anna vormile a
nameAngularJS avaldab selle nimega kontrolleri ümbritseval kontroller ulatus. - lisama
novalidatevormimärgendile, et brauseri natiivne valideerimine ei segaks. - Märkige väljad, kasutades
required,ng-minlength,ng-maxlengthorng-pattern. - Kaitse koerajuhti
$validja edastage vormikontroller, et funktsioon saaks üksikuid välju kontrollida. - Keela nupp, kasutades
ng-disabledosutades$invalid, mis annab kohest visuaalset tagasisidet.
<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>
Selle mustri puhul esinevate probleemide põhjuseks on enamasti kaks viga:
- Double esitamist. Siduv
ng-clicksaatmisnupul samal ajalng-submitistub vormil ja käivitab käitleja kaks korda, üks kord iga sündmuse kohta. Ametlik viide hoiatab kahe käitleja kombineerimise eest, seega vali üks. - Ootamatud esitused. Mistahes nupp vormil ilma
type="button"käivitab submit sündmuse. Märgi tühistamis- ja lähtestamisnupud selgesõnaliselt, vastasel juhul käivitavad need ka käitleja.
Valvamine peal $valid on mugavus, mitte turvakontroll. Väärtused tuleb enne salvestamist serveris uuesti valideerida.


