AngularJS-uttryck: Array, Objekt, $eval, Strängar
⚡ Smart sammanfattning
AngularJS-uttryck är kodfragment placerade inom dubbla klammerparenteser som binder data direkt till en mall. De utvärderar tal, strängar, objekt och arrayer, och funktionen $eval utför samma utvärdering inifrån en kontroller.

Vad är AngularJS-uttryck?
Uttryck är variabler skrivna inom dubbla klammerparenteser {{ }}De används mycket ofta i AngularJS och förekommer i de tidigare handledningarna i den här serien.
⚠️ Supportmeddelande: AngularJS nådde slut på livscykeln den 31 december 2021 och får inga ytterligare patchar eller säkerhetsfixar. Syntaxen nedan förblir korrekt för underhåll av befintliga AngularJS 1.x-applikationer; nya projekt bör använda moderna Vinkel, där interpoleringsklackar fortfarande finns men ng-init och $eval låt bli.
Förklara AngularJS-uttryck med ett exempel
AngularJS-uttryck skrivs inom dubbla klammerparenteser, som i {{expression}}.
Syntax: ett enkelt exempel på ett uttryck är {{5 + 6}}.
AngularJS-uttryck binder data till HTML på samma sätt som ng-bind-direktivet, och AngularJS visar data exakt där uttrycket är placerat.
I det här exemplet visar vi en enkel addition av tal som ett uttryck.
<!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 Förklaring:
- ng-app-direktivet är tomt, vilket betyder att ingen modul förser styrenheter, direktiveller tjänster till den här sidan.
- Ett enkelt uttryck adderar två tal.
Produktion:
Additionen av 9 och 6 sker och resultatet, 15, visas.
AngularJS Numbers
Uttryck fungerar med tal. Det här exemplet multiplicerar två talvariabler, margin och profit, och visar produkten.
<!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 Förklaring:
- Direktivet ng-init definierar variabler och deras värden i själva vyn, ungefär som lokala variabler i vilken som helst programmeringsspråk. Här
marginochprofitdeklareras och tilldelas. - Uttrycket multiplicerar sedan dessa två lokala variabler.
Produktion:
Multiplikationen av 2 och 200 sker och produkten, 400, visas.
AngularJS Strings
Uttryck fungerar även med strängar. Det här exemplet definierar firstName och lastName och visar båda.
<!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 Förklaring:
- Direktivet ng-init definierar
firstNamemed värdet "Guru"OchlastNamemed värdet ”99”. - Uttrycken
{{firstName}}och{{lastName}}läs dessa variabler och visa dem i vyn.
Produktion:
Båda värdena visas på skärmen.
AngularJS-objekt
Uttryck fungerar med JavaScript objekt, som består av namn-värdepar. Syntaxen för en JavaSkriptobjektet ser ut så här:
var car = {type: "Ford", model: "Explorer", color: "White"};
Detta exempel definierar en person objekt som innehåller två nyckel-värde-par, firstName och 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 Förklaring:
- Direktivet ng-init definierar objektet
personmed nyckel-värde-parenfirstNamesatt till "Guru"OchlastNameinställd på “99”. - Uttrycken
{{person.firstName}}och{{person.lastName}}läs dessa medlemmar. Eftersom de tillhör objektet krävs punktnotation för att nå deras värden.
Produktion:
Värdena för firstName och lastName visas på skärmen.
AngularJS-arrayer
Uttryck fungerar med arrayer. Det här exemplet definierar en array som innehåller en elevs betyg i tre ämnen och visar varje värde.
<!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 Förklaring:
- Direktivet ng-init definierar arrayen
marksmed de tre värdena 1, 15 och 19. - Uttryck av formen
marks[index]läs varje element.
Produktion:
Markeringarna som definierats i arrayen visas.
AngularJS-uttrycksmöjligheter och begränsningar
Capabilities
- AngularJS-uttryck liknar JavaSkriptuttryck delar mycket av samma kraft och flexibilitet.
- Var JavaSkriptet genererar ett ReferenceError eller TypeError på en odefinierad egenskap, AngularJS-utvärderingen är förlåtande och ger odefinierad eller null.
- Filter kan tillämpas inuti ett uttryck för att formatera data innan den visas.
- Den ternära operatorn stöds, så
{{ isReady ? 'Yes' : 'No' }}är giltig.
Begränsningar
- Loopar och undantagshantering kan inte användas inuti ett AngularJS-uttryck. Villkorlig logik är begränsad till den ternära operatorn;
ifuttalanden finns inte tillgängliga. - Funktioner kan inte deklareras i ett uttryck, inte ens inuti ett ng-init-direktiv.
- Reguljära uttryck kan inte skapas inuti ett uttryck. Ett reguljärt uttryck är en kombination av symboler och tecken som används för att matcha strängar, till exempel
.*\.txt$, och sådana litteraler avvisas. - Kommaoperatorn (
,) Ochvoidoperatören är inte tillåtna.
ng-bind vs. Expression Braces: Vilken ska man använda?
Double klammerparenteser och ng-bind-direktivet producerar samma renderade utdata, så valet mellan dem ser godtyckligt ut. Det är det inte. De två beter sig olika under tiden innan AngularJS har laddats klart, och den skillnaden är synlig för personen som använder sidan.
| Aspect | {{ expression }} | ng-bind |
|---|---|---|
| Skrivet i | Elementinnehåll | Ett elementattribut |
| Innan AngularJS laddas | Råa tandställningsblinkar på skärmen | Ingenting visas |
| läsbarhet | Högre — värdet ligger i linje | Lägre — värdet är dolt i ett attribut |
| Flera värden per element | Ja | Nej, endast en bindning |
| Engångsbindning | Ja, med {{::value}} |
Ja, med ng-bind="::value" |
Den korta förekomsten av råa klammerparenteser kallas för "flash of uninterpolated content", och det händer eftersom webbläsaren renderar markupen innan AngularJS kompilerar den. Använd ng-bind, eller lägg till ng-cloak-direktivet, för innehåll som syns ovanför vikningen. Klammerparenteser är fortfarande det tydligare och mer läsbara valet överallt annars, särskilt där flera värden visas inuti ett element.
Skillnaden mellan expression och $eval
Ocuco-landskapet $eval Funktionen utvärderar uttryck inifrån kontrollenheten. Uttryck utvärderas i vyn, medan $eval utvärderas i kontrollkod.
Detta exempel använder $eval att addera två tal och placera resultatet på oscilloskopobjektet så att vyn kan visa 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 Förklaring:
- Två omfattningsvariabler,
aochb, var och en har värdet 1. $scope.$evalutvärderar deras addition och tilldelar resultatet till scope-variabelnvalue.- Vyn visas sedan
value.
Produktion:
Utdata visar uttrycket som utvärderas inuti styrenhet, med summan av de två omfattningsvariablerna som skickas till och visas i vyn.












