ng-submit u AngularJS-u: Obrada slanja obrasca s primjerom
โก Pametni saลพetak
ng-submit u AngularJS-u veลพe funkciju kontrolera na dogaฤaj slanja obrasca u pregledniku, tako da se unesene vrijednosti obraฤuju unutar kontrolera i stranica se nikada ne ponovno uฤitava putem zadanog POST-a.
AngularJS ng-submit Direktiva
The ng-podnesi direktiva u AngularJS-u koristi se za vezanje aplikacije na dogaฤaj slanja u pregledniku. Dakle, u sluฤaju AngularJS na dogaฤaju slanja, moลพete izvrลกiti neku obradu unutar samog kontrolera i zatim prikazati obraฤene informacije korisniku.
Napomena o verziji: AngularJS 1.x je prestao biti dostupan za dugoroฤnu podrลกku 31. prosinca 2021., a tim za framework potvrฤuje da Podrลกka za AngularJS je sluลพbeno zavrลกena u sijeฤnju 2022., tako da ne slijede nikakva izdanja ili sigurnosne zakrpe. Svaki korak i blok koda u nastavku ฤuva se toฤno onako kako je napisan, kao povijesna referenca. Novi rad pripada modernom Angularu, koji izraลพava istu ideju kao (ngSubmit) vezan na FormGroup.
Kako poslati obrazac u AngularJS koristeฤi ng-submit
Procesima podnoลกenja informacija na web stranici obiฤno upravlja dogaฤaj podnoลกenja u web pregledniku. Ovaj se dogaฤaj obiฤno koristi za slanje informacija koje je korisnik moลพda unio na web-stranici na posluลพitelj za daljnju obradu kao ลกto su vjerodajnice za prijavu, podaci obrasca itd. Podnoลกenje informacija moลพe se izvrลกiti putem GET ili POST zahtjeva.
Uzmimo primjer slanja obrazaca u Angularu da vidimo kako poslati obrasce u AngularJS.
U naลกem primjeru slanja obrasca AngularJS, korisniku ฤemo predstaviti tekstni okvir u koji mogu unijeti temu koju ลพele uฤiti. Na stranici ฤe se nalaziti gumb za slanje, koji ฤe kada se pritisne dodati temu na neureฤeni popis.
Ilustracija ispod trackoji teku, od teme upisane u tekstni okvir, preko gumba Poลกalji, do stavke popisa dodane ispod.

Primjer slanja AngularJS obrasca
Sada ฤemo vidjeti primjer podnoลกenja obrasca AngularJS iz kontrolera pomoฤu direktive 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 Objaลกnjenje:
- Prvo deklariramo HTML oznaku obrasca koja ฤe sadrลพavati kontrole "okvir za tekst" i "gumb za slanje" kao ลกto je prikazano u primjeru dogaฤaja slanja obrasca Angular. Zatim koristimo AngularJS direktivu ng-submit za povezivanje funkcije "Display()" s naลกim obrascem. Ova funkcija bit ฤe definirana u naลกem kontroleru i bit ฤe pozvana kada se obrazac poลกalje.
- Imamo tekstualnu kontrolu u koju ฤe korisnik unijeti temu koju ลพeli nauฤiti. Ovo ฤe biti vezano uz varijablu pod nazivom 'Topic' koja ฤe se koristiti u naลกem kontroleru.
- Postoji uobiฤajeni gumb za slanje u AngularJS-u koji ฤe korisnik kliknuti kada unese temu koju ลพeli.
- Koristili smo ng-ponovi direktiva za prikaz stavki popisa tema koje korisnik unese. Direktiva ng-repeat prolazi kroz svaku temu u nizu 'AllTopic' i prikazuje naziv teme u skladu s tim.
- U naลกem kontroleru deklariramo varijablu polja pod nazivom 'AllTopic'. Ona ฤe se koristiti za pohranjivanje svih tema koje je korisnik unio u 2. koraku.
- Definiramo kod za naลกu Display() funkciju koja ฤe biti pozvana kad god korisnik klikne gumb Poลกalji. Ovdje koristimo funkciju push array za dodavanje tema koje je korisnik unio putem varijable 'Topic' u naลก niz 'AllTopic'.
Ako se primjer koda obrasca AngularJS uspjeลกno izvrลกi, sljedeฤi ฤe se izlaz prikazati kada pokrenete svoj kod u pregledniku.
Izlaz:
Da biste vidjeli da kod radi, prvo unesite naziv teme kao ลกto je "Angular" kao ลกto je prikazano gore u tekstualni okvir, a zatim kliknite na gumb Poลกalji.
- Nakon ลกto se klikne gumb za slanje, vidjet ฤete da je stavka koja je unesena u tekstualni okvir dodana na popis stavki.
- To se postiลพe funkcijom Display(), koja se poziva kada se pritisne gumb za slanje.
- Funkcija Display() dodaje tekst u varijablu polja pod nazivom 'AllTopic'. A naลกa direktiva ng-repeat prolazi kroz svaku vrijednost u varijabli polja 'AllTopic' i prikazuje ih kao stavke popisa u skladu s tim.
ng-submit vs ng-click: koji koristiti
Oboje AngularJS direktive mogu pozvati istu funkciju kontrolera, ali ipak osluลกkuju razliฤite dogaฤaje preglednika. ng-submit sjedi na <form> oznaku i reagira na dogaฤaj slanja, pa se takoฤer aktivira kada korisnik pritisne Enter unutar polja. ng-click nalazi se na gumbu i reagira samo na klik miลกa ili ekvivalentnu aktivaciju.
| Aspekt | ng-podnesi | ng-klik |
|---|---|---|
| Domaฤinski element | Oznaka obrasca | Bilo koji element na koji se moลพe kliknuti |
| Dogaฤaj je posluลกan | poslati, ukljuฤujuฤi tipku Enter | samo klik |
| Zadani preglednik POST | Potisnuto direktivom | I dalje se aktivira s gumba za slanje |
| Pristup stanju obrasca | ฤita $valid i $invalid na kontroleru forme | Nema vlastiti kontekst forme |
| Prirodno pristajanje | Predavanje podataka obrasca kontroleru | Gumbi alatne trake, poveznice, modalni okidaฤi |
Podrลกka za tipkovnicu obiฤno odluฤuje o izboru. Obrazac povezan s ng-click samo ignorira tipku Enter, ลกto frustrira korisnike pri popunjavanju okvira za prijavu. Rezerviraj ng-click za radnje koje nisu slanje obrasca, kao ลกto su brisanje polja ili otvaranje dijaloga.
Zaลกto ng-submit sprjeฤava slanje putem zadanog preglednika
Obiฤan HTML obrazac reagira na dogaฤaj slanja serijaliziranjem svojih polja i traลพenjem od preglednika da uฤita novu stranicu, ลกto odbacuje svaku vrijednost koja se nalazi u $scope, ng-submit Direktiva sprjeฤava da se to dogodi: poziva preventDefault() za vas, tako da se izraz izvrลกava, a trenutna stranica ostaje na mjestu. Ne $event argument i nije potreban ruฤni poziv.
Potiskivanje ima jedan dokumentirani uvjet. Prema ngSubmit referenca, zadana radnja se sprjeฤava samo dok obrazac ne sadrลพi action, data-action or x-action atribut. Dodajte bilo koji od njih i preglednik ฤe se nakon zavrลกetka obrade navigacijom ponaลกati kao i obiฤno, ลกto je ispravno ponaลกanje za progresivno poboljลกani obrazac prikazan od strane posluลพitelja i iznenaฤenje svugdje drugdje.
Buduฤi da direktiva proguta objekt dogaฤaja, proฤitajte poslane vrijednosti iz svojstava koja ng-model pisali u opseg ili ih eksplicitno prosljeฤivali, kao u ng-submit="Display(Topic)".
Kako validirati obrazac prije pokretanja ng-submit naredbe
Gornji primjer prihvaฤa praznu temu jer niลกta prvo ne provjerava tekstualni okvir. AngularJS gradi kontroler obrasca za svaki imenovani obrazac, a taj kontroler otkriva zastavice potrebne za slanje. Dodaj novalidate pa preglednik iskljuฤuje vlastite HTML5 mjehuriฤe i AngularJS validacija obrasca preuzima.
- Dajte obrazac
nameAngularJS objavljuje kontroler tog imena na okolnom kontrolor opseg. - dodati
novalidateu oznaku obrasca kako bi se izvorna validacija preglednika izbjegla. - Oznaฤite polja pomoฤu
required,ng-minlength,ng-maxlengthorng-pattern. - ฤuvajte vodiฤa s
$validi proslijedite kontroler obrasca kako bi funkcija mogla pregledati pojedinaฤna polja. - Onemoguฤite gumb pomoฤu
ng-disabledpokazujuฤi na$invalid, ลกto daje trenutnu vizualnu povratnu informaciju.
<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>
Dvije pogreลกke objaลกnjavaju veฤinu prijavljenih problema s ovim uzorkom:
- Double podnoลกenje. Vezivanje
ng-clickna gumbu za slanje dokng-submitsjedi na obrascu pokreฤe rukovatelj dva puta, jednom po dogaฤaju. Sluลพbena referenca upozorava na kombiniranje dvaju rukovatelja, stoga odaberite jedan. - Neoฤekivane prijave. Bilo koji gumb unutar obrasca bez
type="button"pokreฤe dogaฤaj slanja. Izriฤito oznaฤi gumbe za otkazivanje i resetiranje, inaฤe i oni aktiviraju dogaฤaj za obradu.
ฤuvanje na $valid je pogodnost, a ne sigurnosna kontrola. Vrijednosti se i dalje moraju ponovno validirati na posluลพitelju prije pohrane.


