AngularJS-udtryk: Array, objekter, $eval, strenge
โก Smart opsummering
AngularJS-udtryk er kodefragmenter placeret i dobbelte parenteser, der binder data direkte ind i en skabelon. De evaluerer tal, strenge, objekter og arrays, og funktionen $eval udfรธrer den samme evaluering indefra en controller.

Hvad er AngularJS-udtryk?
Udtryk er variabler skrevet i dobbelte parenteser {{ }}De bruges meget ofte i AngularJS og optrรฆder i de tidligere vejledninger i denne serie.
โ ๏ธ Supportmeddelelse: AngularJS nรฅet levetidens afslutning den 31. december 2021 og modtager ingen yderligere programrettelser eller sikkerhedsrettelser. Syntaksen nedenfor forbliver korrekt til vedligeholdelse af eksisterende AngularJS 1.x-applikationer; nye projekter bรธr bruge moderne Vinkelforskydning, hvor interpolationsparenteser stadig findes, men ng-init og $eval lade vรฆre med.
Forklar AngularJS-udtryk med et eksempel
AngularJS-udtryk skrives i dobbelte parenteser, som i {{expression}}.
Syntaks: et simpelt eksempel pรฅ et udtryk er {{5 + 6}}.
AngularJS-udtryk binder data til HTML pรฅ samme mรฅde som ng-bind-direktivet, og AngularJS viser dataene prรฆcis der, hvor udtrykket er placeret.
I dette eksempel viser vi en simpel addition af tal som et udtryk.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app=""> Addition : {{6+9}} </div> </body> </html>
Code Forklaring:
- ng-app-direktivet er tomt, hvilket betyder, at intet modul forsyner controllere, direktivereller tjenester til denne side.
- Et simpelt udtryk lรฆgger to tal sammen.
Output:
Additionen af โโ9 og 6 finder sted, og resultatet, 15, vises.
AngularJS Numbers
Udtryk fungerer med tal. Dette eksempel multiplicerer to talvariabler, margin og profit, og viser produktet.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="margin=2;profit=200"> Total profit margin {{margin*profit}} </div> </body> </html>
Code Forklaring:
- ng-init-direktivet definerer variabler og deres vรฆrdier i selve visningen, ligesom lokale variabler i enhver anden programmeringssprog. Her
marginogprofiter deklareret og tildelt. - Udtrykket multiplicerer derefter disse to lokale variabler.
Output:
Multiplikationen af โโ2 og 200 finder sted, og produktet 400 vises.
AngularJS Strings
Udtryk fungerer ogsรฅ med strenge. Dette eksempel definerer firstName og lastName og viser begge.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="firstName='Guru';lastName='99'"> First Name : {{firstName}}<br> Last Name : {{lastName}} </div> </body> </html>
Code Forklaring:
- ng-init-direktivet definerer
firstNamemed vรฆrdien "Guru"OglastNamemed vรฆrdien โ99โ. - Udtrykket
{{firstName}}og{{lastName}}lรฆse disse variabler og vise dem i viewet.
Output:
Begge vรฆrdier vises pรฅ skรฆrmen.
AngularJS-objekter
Udtryk fungerer med JavaScript objekter, som bestรฅr af navn-vรฆrdi-par. Syntaksen for en JavaScriptobjektet ser sรฅdan ud:
var car = {type: "Ford", model: "Explorer", color: "White"};
Dette eksempel definerer en person objekt, der indeholder to nรธgle-vรฆrdi-par, firstName og lastName.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="person={firstName:'Guru',lastName:'99'}"> First Name : {{person.firstName}}<br> Last Name : {{person.lastName}} </div> </body> </html>
Code Forklaring:
- ng-init-direktivet definerer objektet
personmed nรธgle-vรฆrdi-parrenefirstNameindstillet til "Guru"OglastNameindstillet til "99". - Udtrykket
{{person.firstName}}og{{person.lastName}}lรฆs disse medlemmer. Fordi de tilhรธrer objektet, krรฆves punktumnotation for at nรฅ deres vรฆrdier.
Output:
Vรฆrdierne for firstName og lastName vises pรฅ skรฆrmen.
AngularJS-arrays
Udtryk fungerer med arrays. Dette eksempel definerer et array, der indeholder en elevs karakterer i tre fag, og viser hver vรฆrdi.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <h1>Guru99 Global Event</h1> <div ng-app="" ng-init="marks=[1,15,19]"> Student Marks<br> Subject1 : {{marks[0]}}<br> Subject2 : {{marks[1]}}<br> Subject3 : {{marks[2]}} </div> </body> </html>
Code Forklaring:
- ng-init-direktivet definerer arrayet
marksmed de tre vรฆrdier 1, 15 og 19. - Udtryk af formen
marks[index]lรฆs hvert element.
Output:
De mรฆrker, der er defineret i arrayet, vises.
AngularJS-udtryksmuligheder og begrรฆnsninger
Capabilities
- AngularJS-udtryk ligner JavaScriptudtryk deler meget af den samme kraft og fleksibilitet.
- Hvor JavaScriptet genererer en ReferenceError eller TypeError pรฅ en udefineret egenskab, AngularJS-evalueringen er tilgivende og giver undefined eller null.
- Filtre kan anvendes i et udtryk for at formatere data, fรธr de vises.
- Den ternรฆre operator understรธttes, sรฅ
{{ isReady ? 'Yes' : 'No' }}er gyldig.
Begrรฆnsninger
- Lรธkker og undtagelseshรฅndtering kan ikke bruges i et AngularJS-udtryk. Betinget logik er begrรฆnset til den ternรฆre operator;
ifudsagn er ikke tilgรฆngelige. - Funktioner kan ikke deklareres i et udtryk, ikke engang i en ng-init-direktiv.
- Regulรฆre udtryk kan ikke oprettes inde i et udtryk. Et regulรฆrt udtryk er en kombination af symboler og tegn, der bruges til at matche strenge, f.eks.
.*\.txt$, og sรฅdanne literaler afvises. - Kommaoperatoren (
,) ogvoidoperatรธr er ikke tilladt.
ng-bind vs. udtryksbรธjler: Hvilke skal man bruge
Double parenteser og ng-bind-direktivet producerer det samme gengivne output, sรฅ valget mellem dem virker vilkรฅrligt. Det er det ikke. De to opfรธrer sig forskelligt i รธjeblikket, fรธr AngularJS er fรฆrdig med at indlรฆse, og den forskel er synlig for den person, der bruger siden.
| Aspect | {{ expression }} | ng-bind |
|---|---|---|
| Skrevet i | Elementindhold | En elementattribut |
| Fรธr AngularJS indlรฆses | Rรฅ tandbรธjler blinker pรฅ skรฆrmen | Intet vises |
| Lรฆsbarhed | Hรธjere โ vรฆrdien ligger inline | Lavere โ vรฆrdien er skjult i en attribut |
| Flere vรฆrdier pr. element | Ja | Nej, kun รฉn binding |
| Engangsbinding | Ja, med {{::value}} |
Ja, med ng-bind="::value" |
Den korte forekomst af rรฅ parenteser er kendt som "flash of uninterpolated content", og det sker, fordi browseren gengiver markup'en, fรธr AngularJS kompilerer den. Brug ng-bind, eller tilfรธj ng-cloak-direktivet, for indhold, der er synligt over folden. Parenteser er fortsat det klarere og mere lรฆsbare valg alle andre steder, isรฆr hvor flere vรฆrdier vises inde i รฉt element.
Forskellen mellem udtryk og $eval
$eval Funktionen evaluerer udtryk indefra controlleren. Udtryk evaluerer i viewet, hvorimod $eval evalueres i controllerkode.
Dette eksempel bruger $eval at lรฆgge to tal sammen og placere resultatet pรฅ oscilloskopobjektet, sรฅ visningen kan vise det.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> </head> <body> <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script> <div ng-app="sampleApp" ng-controller="AngularController"> <h1>Guru99 Global Event</h1> {{value}} </div> <script> var sampleApp = angular.module('sampleApp', []); sampleApp.controller('AngularController', function($scope) { $scope.a = 1; $scope.b = 1; $scope.value = $scope.$eval('a+b'); }); </script> </body> </html>
Code Forklaring:
- To omfangsvariabler,
aogb, hver har vรฆrdien 1. $scope.$evalevaluerer deres addition og tildeler resultatet til omfangsvariablenvalue.- Visningen vises derefter
value.
Output:
Outputtet viser udtrykket, der evalueres indeni controller, med summen af โโde to omfangsvariabler, der sendes til og vises i visningen.












