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.

  • ๐Ÿงฉ Bindende syntaks: Double parenteser gengiver en vรฆrdi, hvor udtrykket sidder, hvilket giver det samme resultat som ng-bind-direktivet.
  • ๐Ÿ”ข Understรธttede typer: Numbers, strenge, JavaScriptobjekter, der tilgรฅs med punktumnotation, og arrays, der tilgรฅs via indeks, evalueres alle korrekt.
  • ๐Ÿท๏ธ Inline-variabler: ng-init-direktivet deklarerer view-level variabler, som udtryk derefter kan lรฆse uden en controller.
  • ๐Ÿ›ก๏ธ Tilgivende evaluering: Udefinerede egenskaber giver udefineret i stedet for at udlรธse ReferenceError-plainen JavaScriptet ville hรฆve.
  • ๐Ÿšซ Hรฅrde grรฆnser: Lรธkker, undtagelser, funktionsdeklarationer, regulรฆre udtryk og komma- og void-operatorerne er ikke tilgรฆngelige.
  • ๐Ÿ‡ง๐Ÿ‡ท Controller-evaluering: $scope.$eval evaluerer en udtryksstreng i controllerkode og eksponerer resultatet for viewet.
  • โš ๏ธ Supportstatus: AngularJS nรฅede slutningen af โ€‹โ€‹sin levetid den 31. december 2021 og modtager ikke yderligere sikkerhedsrettelser.

AngularJS udtryk

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.

AngularJS 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:

  1. ng-app-direktivet er tomt, hvilket betyder, at intet modul forsyner controllere, direktivereller tjenester til denne side.
  2. Et simpelt udtryk lรฆgger to tal sammen.

Output:

AngularJS udtryk

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.

AngularJS Numbers

<!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:

  1. ng-init-direktivet definerer variabler og deres vรฆrdier i selve visningen, ligesom lokale variabler i enhver anden programmeringssprog. Her margin og profit er deklareret og tildelt.
  2. Udtrykket multiplicerer derefter disse to lokale variabler.

Output:

AngularJS Numbers

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.

AngularJS Strings

<!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:

  1. ng-init-direktivet definerer firstName med vรฆrdien "Guru"Og lastName med vรฆrdien โ€œ99โ€.
  2. Udtrykket {{firstName}} og {{lastName}} lรฆse disse variabler og vise dem i viewet.

Output:

AngularJS Strings

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.

AngularJS-objekter

<!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:

  1. ng-init-direktivet definerer objektet person med nรธgle-vรฆrdi-parrene firstName indstillet til "Guru"Og lastName indstillet til "99".
  2. 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:

AngularJS-objekter

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.

AngularJS-arrays

<!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:

  1. ng-init-direktivet definerer arrayet marks med de tre vรฆrdier 1, 15 og 19.
  2. Udtryk af formen marks[index] lรฆs hvert element.

Output:

AngularJS-arrays

De mรฆrker, der er defineret i arrayet, vises.

AngularJS-udtryksmuligheder og begrรฆnsninger

Capabilities

  1. AngularJS-udtryk ligner JavaScriptudtryk deler meget af den samme kraft og fleksibilitet.
  2. Hvor JavaScriptet genererer en ReferenceError eller TypeError pรฅ en udefineret egenskab, AngularJS-evalueringen er tilgivende og giver undefined eller null.
  3. Filtre kan anvendes i et udtryk for at formatere data, fรธr de vises.
  4. Den ternรฆre operator understรธttes, sรฅ {{ isReady ? 'Yes' : 'No' }} er gyldig.

Begrรฆnsninger

  1. Lรธkker og undtagelseshรฅndtering kan ikke bruges i et AngularJS-udtryk. Betinget logik er begrรฆnset til den ternรฆre operator; if udsagn er ikke tilgรฆngelige.
  2. Funktioner kan ikke deklareres i et udtryk, ikke engang i en ng-init-direktiv.
  3. 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.
  4. Kommaoperatoren (,) og void operatรธ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.

Forskellen mellem udtryk og $eval

<!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:

  1. To omfangsvariabler, a og b, hver har vรฆrdien 1.
  2. $scope.$eval evaluerer deres addition og tildeler resultatet til omfangsvariablen value.
  3. Visningen vises derefter value.

Output:

Forskellen mellem udtryk og $eval

Outputtet viser udtrykket, der evalueres indeni controller, med summen af โ€‹โ€‹de to omfangsvariabler, der sendes til og vises i visningen.

Ofte Stillede Spรธrgsmรฅl

At sรฆtte to kolon foran et udtryk, som i {{::name}}, stopper med at overvรฅge den, nรฅr en vรฆrdi er fortolket. Dette fjerner overvรฅgeren og sรฆnker omkostningerne ved digest pรฅ sider med mange statiske bindinger.

$eval evaluerer en streng รธjeblikkeligt mod en rรฆkkevidde. $parse returnerer en genbrugelig funktion til gentagen evaluering. $interpolate hรฅndterer en hel skabelonstreng, der indeholder parenteser, i stedet for et enkelt udtryk.

For det meste. AI Vรฆrktรธjer beholder parenteser og omskriver filtre som rรธr, men ng-init-variabler har ingen Angular-รฆkvivalent og skal flyttes manuelt til en komponentklasse.

AI-vรฆrktรธjer scanner skabeloner for funktionskald i bindinger, som kรธres igen i hver digest-cyklus, og foreslรฅr enten at cache resultatet pรฅ scope eller skifte til en engangsbinding.

AngularJS-evaluering er bevidst tilgivende. En manglende egenskab giver undefined, som gengives som en tom streng, sรฅ en tom vรฆrdi betyder normalt en tastefejl i egenskabsstien snarere end en runtime-fejl.

Opsummer dette indlรฆg med: