ng-submit AngularJS:ssä: Lomakkeen lähetyksen käsittely esimerkin avulla
⚡ Älykäs yhteenveto
AngularJS:n ng-submit sitoo ohjainfunktion lomakkeen selaimen lähetystapahtumaan, joten syötetyt arvot käsitellään ohjaimen sisällä eikä sivu koskaan lataudu uudelleen oletusarvoisen POST-kutsufunktion kautta.
AngularJS ng-submit -direktiivi
ng-submit AngularJS:n direktiiviä käytetään sitomaan sovellus selaimen lähetystapahtumaan. Joten tapauksessa angularjs lähetystapahtumassa voit suorittaa jonkin verran käsittelyä itse rekisterinpitäjässä ja näyttää sitten käsitellyt tiedot käyttäjälle.
Versiohuomautus: AngularJS 1.x jätti pitkäaikaisen tuen 31. joulukuuta 2021, ja framework-tiimi vahvistaa, että AngularJS-tuki päättyi virallisesti tammikuussa 2022, joten julkaisuja tai tietoturvapäivityksiä ei seuraa. Jokainen alla oleva vaihe ja koodilohko säilytetään täsmälleen sellaisenaan, kuten historiallisessa viitteessä. Uusi työ kuuluu moderniin Angulariin, joka ilmaisee saman ajatuksen kuin (ngSubmit) sidottu FormGroup-ryhmään.
Lomakkeen lähettäminen AngularJS:ssä ng-submitilla
Tietojen lähetysprosessit verkkosivulla käsitellään tavallisesti verkkoselaimen lähetystapahtumassa. Tätä tapahtumaa käytetään tavallisesti lähettämään palvelimelle tietoja, jotka käyttäjä on saattanut syöttää verkkosivulle, kuten kirjautumistiedot, lomaketiedot jne. jatkokäsittelyä varten. Tietojen lähettäminen voidaan tehdä GET- tai POST-pyynnön kautta.
Otetaan esimerkki Angular-lomakkeen lähetyksestä nähdäksesi, kuinka lomakkeita lähetetään AngularJS:ssä.
AngularJS-lomakkeen lähetysesimerkissä aiomme esittää käyttäjälle tekstilaatikon, johon hän voi kirjoittaa aiheen, jonka hän haluaa oppia. Sivulle tulee lähetyspainike, jota painettaessa aihe lisätään järjestämättömälle listalle.
Alla oleva kuva tracjotka kulkevat tekstikenttään kirjoitetusta aiheesta Lähetä-painikkeen kautta sen alle liitettyyn luettelokohtaan.

Esimerkki AngularJS-lomakkeen lähetyksestä
Nyt näemme esimerkin AngularJS-lomakkeen lähettämisestä rekisterinpitäjältä ng-submit-ohjeen avulla:
<!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 Selitys:
- Ensin määrittelemme lomakkeen HTML-tagin, joka sisältää "tekstiruudun" ja "lähetä-painikkeen" ohjausobjektit, kuten Angularin lomakkeen lähetystapahtuman esimerkissä on esitetty. Sitten käytämme ng-submit AngularJS -direktiiviä sitoaksemme funktion "Display()" lomakkeeseen. Tämä funktio määritellään ohjaimessamme ja sitä kutsutaan, kun lomake lähetetään.
- Meillä on tekstiohjaus, johon käyttäjä kirjoittaa aiheen, jonka hän haluaa oppia. Tämä sidotaan muuttujaan nimeltä "Topic", jota käytetään ohjaimessamme.
- AngularJS:ssä on normaali lähetyspainike, jota käyttäjä napsauttaa, kun hän on kirjoittanut haluamansa aiheen.
- Olemme käyttäneet ng-toista -ohje, joka näyttää käyttäjän syöttämien aiheiden luettelokohteet. ng-repeat-käsky käy läpi jokaisen aiheen taulukossa "AllTopic" ja näyttää aiheen nimen vastaavasti.
- Ohjaimessamme deklaroimme taulukkomuuttujaa nimeltä 'AllTopic'. Tätä käytetään kaikkien käyttäjän vaiheessa 2 syöttämien aiheiden säilyttämiseen.
- Määrittelemme koodia Display()-funktiollemme, jota kutsutaan aina, kun käyttäjä napsauttaa Lähetä-painiketta. Täällä käytämme push array -toimintoa lisätäksemme aiheet, jotka käyttäjä on syöttänyt muuttujan "Topic" kautta taulukkoomme "AllTopic".
Jos AngularJS-lomakkeen esimerkkikoodi suoritetaan onnistuneesti, seuraava tulos näytetään, kun suoritat koodisi selaimessa.
lähtö:
Nähdäksesi koodin toimivan, kirjoita ensin aiheen nimi, kuten "Angular", kuten yllä näkyy tekstikentässä, ja napsauta sitten Lähetä-painiketta.
- Kun lähetä-painiketta on napsautettu, näet tekstikenttään syötetyn kohteen lisättynä kohdeluetteloon.
- Tämä saavutetaan Display()-funktiolla, jota kutsutaan, kun lähetyspainiketta painetaan.
- Display()-funktio lisää tekstin taulukkomuuttujaan nimeltä "AllTopic". Ja ng-repeat -direktiivimme käy läpi jokaisen taulukon muuttujan 'AllTopic' arvon ja näyttää ne luettelokohteina vastaavasti.
ng-submit vs ng-click: kumpaa käyttää
molemmat AngularJS-direktiivit voivat kutsua samaa ohjainfunktiota, mutta ne kuuntelevat eri selaintapahtumia. ng-submit istuu <form> tagi ja reagoi submit-tapahtumaan, joten se käynnistyy myös, kun käyttäjä painaa Enter-näppäintä kentän sisällä. ng-click sijaitsee painikkeessa ja reagoi vain hiiren napsautukseen tai vastaavaan aktivointiin.
| Aspect | ng-submit | ng-klikkaa |
|---|---|---|
| Isäntäelementti | Lomakkeen tagi | Mikä tahansa klikattava elementti |
| Tapahtuma kuunneltu | lähetä, mukaan lukien Enter-näppäin | vain klikkaus |
| Oletusselaimen POST | Direktiivi estää | Edelleen käynnistyy lähetyspainikkeesta |
| Lomakkeen tilan käyttöoikeus | Lukee lomakkeen ohjaimesta $valid ja $invalid | Ei omaa lomakekontekstia |
| Luonnollinen istuvuus | Lomaketietojen luovuttaminen ohjaimelle | Työkalupalkin painikkeet, linkit, modaaliset laukaisimet |
Näppäimistötuki ratkaisee yleensä valinnan. Lomake, jossa on johdotus ng-click yksinään jättää Enter-näppäimen huomiotta, mikä turhauttaa käyttäjiä kirjautumiskentän täyttämisessä. ng-click toiminnoille, jotka eivät ole lomakkeen lähetyksiä, kuten kentän tyhjentämiselle tai valintaikkunan avaamiselle.
Miksi ng-submit estää oletusselaimen lähettämisen
Tavallinen HTML-lomake reagoi lähetystapahtumaan sarjoittamalla kenttiään ja pyytämällä selainta lataamaan uuden sivun, joka hylkää kaikki lomakkeessa olevat arvot. $scope. ng-submit direktiivi estää sitä tapahtumasta: se vaatii preventDefault() sinulle, jotta lauseke suoritetaan ja nykyinen sivu pysyy paikallaan. Ei $event argumenttia eikä manuaalista kutsua tarvita.
Vaimentamiseen liittyy yksi dokumentoitu ehto. ngLähetä viite, oletustoiminto estetään vain, kun lomakkeella ei ole action, data-action or x-action attribuutti. Lisää mikä tahansa näistä, niin selain navigoi normaalisti käsittelijän suoritettua toiminnon. Tämä on oikea toiminta asteittain parannetulle palvelimen renderöimälle lomakkeelle ja yllätys kaikkialla muualla.
Koska direktiivi nielee tapahtumaobjektin, lue lähetetyt arvot ominaisuuksista, jotka ng-malli kirjoitti laajuuteen tai välitti ne eksplisiittisesti, kuten ng-submit="Display(Topic)".
Lomakkeen validointi ennen ng-submit-ajoa
Yllä oleva esimerkki hyväksyy tyhjän aiheen, koska mikään ei tarkista tekstiruutua ensin. AngularJS rakentaa lomakeohjaimen jokaiselle nimetylle lomakkeelle, ja tämä ohjain näyttää tarvittavat liput lähetyksen portoimiseksi. Lisää novalidate joten selain jättää omat HTML5-kuplansa pois päältä ja AngularJS:n lomakkeen validointi Ottaa haltuun.
- Anna lomakkeelle
nameAngularJS julkaisee kyseisen nimisen ohjaimen ympäröivällä ohjain laajuus. - Lisää
novalidatelomaketagiin, jotta selaimen natiivivahvistus pysyy poissa tieltä. - Merkitse kentät käyttämällä
required,ng-minlength,ng-maxlengthorng-pattern. - Suojaa ohjaajaa
$validja välitä lomakeohjain, jotta funktio voi tarkastaa yksittäisiä kenttiä. - Poista painike käytöstä
ng-disabledosoittaen$invalid, joka antaa välitöntä visuaalista palautetta.
<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>
Kaksi virhettä selittävät useimpia raportoituja ongelmia tässä mallissa:
- Double jättämisestä. Sitova
ng-clicklähetä-painikkeen kohdalla samalla kunng-submitistuu lomakkeella ja suorittaa käsittelijän kahdesti, kerran tapahtumaa kohden. Virallinen viite varoittaa kahden käsittelijän yhdistämisestä, joten valitse toinen. - Odottamattomat lähetykset. Mikä tahansa lomakkeen sisällä oleva painike ilman
type="button"laukaisee submit-tapahtuman. Merkitse cancel- ja reset-painikkeet erikseen, muuten ne käynnistävät myös käsittelijän.
Vartiointi päällä $valid on mukavuussyistä, ei turvallisuussyistä. Arvot on silti validoitava uudelleen palvelimella ennen niiden tallentamista.


