ng-submit i AngularJS: Hantera formulärinlämning med exempel
⚡ Smart sammanfattning
ng-submit i AngularJS binder en kontrollfunktion till webbläsarens submit-händelse i ett formulär, så att inmatade värden bearbetas inuti kontrollenheten och sidan aldrig laddas om via en standard-POST.

AngularJS ng-submit-direktiv
Ocuco-landskapet ng-submit direktiv i AngularJS används för att binda applikationen till webbläsarens submit-händelse. Så i fallet med AngularJS på submit-händelsen kan du utföra viss behandling inom den registeransvarige själv och sedan visa den behandlade informationen för användaren.
Versionsnotering: AngularJS 1.x lämnade långtidssupporten den 31 december 2021, och ramverksteamet bekräftar det. Stödet för AngularJS har officiellt upphört i januari 2022, så inga utgåvor eller säkerhetsuppdateringar följer. Varje steg och kodblock nedan behålls exakt som skrivet, som historisk referens. Nytt arbete hör hemma i moderna Angular, vilket uttrycker samma idé som (ngSubmit) bunden till en FormGroup.
Hur man skickar in ett formulär i AngularJS med ng-submit
Processerna för att skicka information på en webbsida hanteras normalt av submit-händelsen i webbläsaren. Denna händelse används normalt för att skicka information som användaren kan ha angett på en webbsida till servern för vidare bearbetning som inloggningsuppgifter, formulärdata, etc. Inlämning av information kan göras genom GET- eller POST-förfrågan.
Låt oss ta ett exempel på ett Angular-formulär för att se hur man skickar in formulär i AngularJS.
I vårt AngularJS-formulärsexempel kommer vi att presentera en textruta för användaren där de kan skriva in det ämne de vill lära sig. Det kommer att finnas en skicka-knapp på sidan, som när den trycks kommer att lägga till ämnet till en oordnad lista.
Illustrationen nedan tracsom flyter, från det ämne som skrivits i textrutan, via knappen Skicka, till listobjektet som läggs till under.

AngularJS Form Submit Exempel
Nu kommer vi att se ett exempel på AngularJS-formulär som skickas från Controller med ng-submit-direktivet:
<!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 Förklaring:
- Vi deklarerar först vår HTML-tagg för formuläret, som kommer att innehålla kontrollen "text box" och "submit button" som visas i Angular-formulärets skickahändelseexempel. Sedan använder vi ng-submit AngularJS-direktivet för att binda funktionen "Display()" till vårt formulär. Denna funktion kommer att definieras i vår controller och kommer att anropas när formuläret skickas.
- Vi har en textkontroll där användaren anger det ämne de vill lära sig. Detta kommer att vara bundet till en variabel som heter 'Ämne' som kommer att användas i vår styrenhet.
- Det finns den normala skicka-knappen i AngularJS som användaren kommer att klicka på när de har skrivit in det ämne de vill ha.
- Vi har använt ng-upprepa direktiv för att visa listobjekt över de ämnen som användaren anger. Direktivet ng-repeat går igenom varje ämne i arrayen 'AllTopic' och visar ämnesnamnet därefter.
- I vår kontroller deklarerar vi en arrayvariabel som heter "AllTopic". Denna kommer att användas för att lagra alla ämnen som angavs av användaren i steg 2.
- Vi definierar koden för vår Display() funktion som kommer att anropas när användaren klickar på knappen Skicka. Här borta använder vi push array-funktionen för att lägga till de ämnen som användaren matat in via variabeln 'Ämne' i vår array 'AllTopic'.
Om AngularJS-formexempelkoden exekveras framgångsrikt, kommer följande utdata att visas när du kör din kod i webbläsaren.
Produktion:
För att se koden fungera, ange först ett ämnesnamn som "Angular" som visas ovan i textrutan och klicka sedan på knappen Skicka.
- När du har klickat på knappen Skicka kommer du att se objektet som skrevs in i textrutan som lagts till i listan över objekt.
- Detta uppnås med Display()-funktionen, som anropas när du trycker på knappen Skicka.
- Funktionen Display() lägger till texten i arrayvariabeln som heter 'AllTopic'. Och vårt ng-repeat-direktiv går igenom varje värde i arrayvariabeln 'AllTopic' och visar dem som listobjekt därefter.
ng-submit vs ng-click: Vilken ska du använda
Både AngularJS-direktiv kan anropa samma kontrollfunktion, men de lyssnar på olika webbläsarhändelser. ng-submit sitter på <form> taggen och reagerar på submit-händelsen, så den utlöses även när en användare trycker på Enter i ett fält. ng-click sitter på en knapp och reagerar bara på ett musklick eller motsvarande aktivering.
| Aspect | ng-submit | ng-klicka |
|---|---|---|
| Värdelement | Formulärtaggen | Alla klickbara element |
| Händelse avlyssnad | skicka, inklusive Enter-tangenten | bara klicka |
| Standardwebbläsarens POST | Undertryckt av direktivet | Fortfarande aktiverad från en skicka-knapp |
| Åtkomst till formulärstatus | Läser $valid och $invalid på formulärkontrollanten | Ingen egen formkontext |
| Naturlig passform | Överlämna formulärdata till en kontrollant | Verktygsfältsknappar, länkar, modala utlösare |
Tangentbordsstöd avgör vanligtvis valet. En formulär kopplad till ng-click ignorerar enbart Enter-tangenten, vilket frustrerar användare som fyller i en inloggningsruta. Reservera ng-click för åtgärder som inte är formulärinlämningar, till exempel att rensa ett fält eller öppna en dialogruta.
Varför ng-submit förhindrar standardwebbläsarens inlämning
Ett vanligt HTML-formulär reagerar på en submit-händelse genom att serialisera sina fält och be webbläsaren att ladda en ny sida, vilket ignorerar alla värden som finns i $scope. De ng-submit direktivet hindrar det från att hända: det anropar preventDefault() för dig, så uttrycket körs och den aktuella sidan förblir på plats. $event argument och inget manuellt anrop krävs.
Undertryckandet har ett dokumenterat tillstånd. Enligt ngSkicka referens, standardåtgärden förhindras endast när formuläret inte innehåller något action, data-action or x-action attribut. Lägg till något av dessa så navigerar webbläsaren som vanligt efter att hanteraren är klar, vilket är korrekt beteende för ett progressivt förbättrat serverrenderat formulär och en överraskning överallt annars.
Eftersom direktivet sväljer händelseobjektet, läs inskickade värden från egenskaperna som ng-modell skrev på omfånget, eller skickade dem explicit, som i ng-submit="Display(Topic)".
Hur man validerar ett formulär innan ng-submit körs
Exemplet ovan accepterar ett tomt ämne, eftersom ingenting kontrollerar textrutan först. AngularJS bygger en formulärkontrollant för varje namngivet formulär, och den kontrollanten exponerar de flaggor som behövs för att grinda inlämning. novalidate så webbläsaren lämnar sina egna HTML5-bubblor avstängda och AngularJS formvalidering tar över.
- Ge formuläret en
nameAngularJS publicerar en kontroller med det namnet på den omgivande styrenhet omfattning. - Lägg till
novalidatetill formulärtaggen så att validering av inbyggd webbläsare inte är i vägen. - Markera fälten med hjälp av
required,ng-minlength,ng-maxlengthorng-pattern. - Skydda föraren med
$validoch skicka in formulärkontrollanten så att funktionen kan inspektera enskilda fält. - Inaktivera knappen med
ng-disabledpekar på$invalid, vilket ger omedelbar visuell feedback.
<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>
Två misstag står för de flesta rapporterade problemen med detta mönster:
- Double underkastelse. Bindning
ng-clickpå skicka-knappen medanng-submitsitter på formuläret kör hanteraren två gånger, en gång per händelse. Den officiella referensen varnar för att kombinera de två hanterarna, så välj en. - Oväntade inskickningar. Vilken knapp som helst i ett formulär utan
type="button"utlöser händelsen submit. Markera knapparna för avbryt och återställ explicit, annars utlöser de även hanteraren.
Bevakning på $valid är en bekvämlighet, inte en säkerhetskontroll. Värden måste fortfarande valideras på nytt på servern innan de lagras.


