AngularJS-direktiver: ng-init, ng-app, ng-model og ng-repeat

โšก Smart opsummering

AngularJS-direktiver udvider almindelig HTML med ny adfรฆrd. Markรธrerne ng-app, ng-init, ng-model og ng-repeat bootstrapper en applikation, sender lokale data, binder formularkontroller til modellen og kloner elementer รฉn gang pr. samlingselement.

  • ๐Ÿงฉ Kerneidรฉ: En direktiv er en markรธr pรฅ et HTML-element, der fortรฆller AngularJS-compileren, at den skal knytte adfรฆrd til det.
  • ๐Ÿš€ Bootstrap Point: ng-app deklarerer rodelementet og starter automatisk AngularJS, sรฅ snart siden indlรฆses.
  • ๐Ÿงฎ Lokale data: ng-init tildeler startvรฆrdier til scope-variabler inde i markup'en uden behov for en controller.
  • ๐Ÿ”„ Tovejsbinding: ng-model forbinder et input, en select- eller en textarea-funktion til en scope-egenskab, sรฅ redigeringer opdaterer modellen รธjeblikkeligt.
  • ???? Gentagen markering: ng-repeat kloner sit vรฆrtselement รฉn gang for hvert element i et array eller objekt.
  • ๐ŸŽ›๏ธ Fire pรฅkaldelsesformer: Egenskaben restrict accepterer E, A, C og M for element-, attribut-, klasse- og kommentarsyntaks.
  • ๐Ÿ“š Bredere bibliotek: AngularJS sender dusinvis af indbyggede direktiver, blandt dem ng-bind, ng-if, ng-show, ng-class og ng-click.

AngularJS-direktiver

Hvad er Direktiv i AngularJS?

A Direktiv I AngularJS er der en kommando, der giver HTML ny funktionalitet. Nรฅr AngularJS gennemgรฅr HTML-koden, finder den fรธrst direktiverne pรฅ siden og analyserer derefter HTML-siden i overensstemmelse hermed. Et simpelt eksempel pรฅ et AngularJS-direktiv, som vi har set i tidligere kapitler, er "ng-model-direktivet". Dette direktiv bruges til at binde vores datamodel til vores view.

Bemรฆrk: Du kan have grundlรฆggende AngularJS-kode pรฅ en HTML-side med direktiverne ng-init, ng-repeat og ng-model uden behov for controllere. Logikken bag disse direktiver findes i AngularJS-filen, som leveres af GoogleControllere er AngularJS-programmeringskonstruktioner pรฅ nรฆste niveau, der tillader forretningslogik, men som nรฆvnt er det ikke et krav, at en applikation har en controller for at vรฆre en AngularJS-applikation.

Men hvordan ender en browser med at kรธre en?

Sรฅdan fungerer AngularJS-direktiver i HTML

Som vi definerede i introduktionen, er et AngularJS-direktiv en mรฅde at udvide funktionaliteten af HTMLNรฅr siden indlรฆses, gennemgรฅr AngularJS-compileren DOM'en, matcher hvert element med de registrerede direktiver og vedhรฆfter den fundne adfรฆrd.

AngularJS leveres med snesevis af indbyggede direktiver, plus dem du selv registrerer. De fire, der forklares nedenfor med udtรฆnkte eksempler, ng-app, ng-init, ng-model og ng-repeat, er dem, begyndere mรธder fรธrst. Fรธr disse eksempler, bemรฆrk de fire mรฅder, en direktiv kan skrives pรฅ.

Hvad er de fire typer AngularJS-direktiver?

En direktiv er ikke altid en attribut. AngularJS-compileren kan matche en efter elementnavn, attribut, klassenavn eller kommentar, og hver direktiv erklรฆrer, hvilke former den accepterer gennem dens restrict egenskab. Standardindstillingen er EA, sรฅ bรฅde element- og attributsyntaks fungerer, medmindre du angiver andet. Vรฆrdien er vigtigst, nรฅr du skriver din egen direktiv, fordi compileren ignorerer enhver form, som restrict-vรฆrdien udelukker.

begrรฆnse vรฆrdi Matchet af Eksempel pรฅ opmรฆrkning Typisk brug
E Elementnavn Selvstรฆndige blokke, der ejer en skabelon
A Attribut Tilfรธjelse af adfรฆrd til et eksisterende element
C Klassens navn ร†ldre markup, der ikke kan tage nye attributter
M Kommentar Sjรฆlden, gemt for bagudkompatibilitet

๐Ÿ’ก Tip: Foretrรฆkker element- og attributsyntaks. Officiel reference til AngularJS-direktiv behandler klasse- og kommentarformularer som รฆldre indstillinger. Eksemplerne nedenfor bruger alle attributsyntaks.

ng-app i AngularJS

Dette bruges til at initialisere en AngularJS-applikation. Nรฅr denne direktiv er pรฅ plads pรฅ en HTML-side, fortรฆller den dybest set AngularJS, at denne HTML-side er en AngularJS-applikation.

Eksempel pรฅ ng-app

Eksemplet nedenfor viser, hvordan man laver en normal HTML-applikation om til en AngularJS-applikation.

ng-app i AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="">

    Tutorial Name : {{ "Angular" + "JS"}}

</div>

</body>
</html>

โš ๏ธ Advarsel: Opslaget bevarer originalen chrset="UTF 8", prรฆcis som udgivet. Den korrekte attribut er charset="UTF-8".

Code Forklaring:

  1. Direktivet "ng-app" er tilfรธjet til vores div-tag for at indikere, at denne applikation er en AngularJS-applikation. Bemรฆrk, at ng-app-direktivet kan anvendes pรฅ ethvert tag, sรฅ det kan ogsรฅ placeres i body-tagget.
  2. Fordi vi har defineret denne applikation som en AngularJS-applikation, kan vi nu bruge AngularJS-funktionaliteten. I vores tilfรฆlde bruger vi udtryk til blot at sammenkรฆde 2 strenge.

Hvis koden udfรธres korrekt, vises nedenstรฅende output.

Output:

ng-app i AngularJS

Outputtet viser tydeligt outputtet af udtrykket, hvilket kun blev muligt, fordi vi definerede applikationen som en AngularJS-applikation. Den nรฆste direktiv leverer dens data.

ng-init i AngularJS

Dette bruges til at initialisere applikationsdata. Nogle gange kan du have brug for lokale data til din applikation, og dette kan gรธres med ng-init-direktivet.

Eksempel pรฅ ng-init

I dette eksempel skal vi oprette en variabel kaldet "TutorialName" ved hjรฆlp af ng-init-direktivet og vise vรฆrdien af โ€‹โ€‹denne variabel pรฅ siden.

ng-init i AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="" ng-init="TutorialName='Angular JS'">

    Tutorial Name : {{ TutorialName}}

</div>

</body>
</html>

Code Forklaring:

  1. ng-init-direktivet fรธjes til vores div-tag for at definere en lokal variabel kaldet "TutorialName", og vรฆrdien givet til dette er "AngularJS".
  2. Vi bruger udtryk i AngularJS til at vise outputtet af variabelnavnet "TutorialName", som blev defineret i vores ng-init-direktiv.

Hvis koden udfรธres korrekt, vises nedenstรฅende output.

Output:

ng-init i AngularJS

I outputtet,

  • Resultatet viser tydeligt outputtet af udtrykket, som indeholder strengen "AngularJS". Dette er et resultat af, at strengen "AngularJS" er tildelt variablen 'TutorialName' i ng-init sektionen.

Den nรฆste direktiv sender data tilbage fra skรฆrmen til modellen.

ng-model i AngularJS

Og endelig har vi ng-model-direktivet, som bruges til at binde vรฆrdien af โ€‹โ€‹en HTML-kontrol til applikationsdata.

Eksempel pรฅ ng-model

I dette eksempel

  • Vi skal lave 2 variable kaldet "mรฆngde" og "pris". Disse variabler vil vรฆre bundet til 2 tekstinputkontroller.
  • Vi vil derefter vise det samlede belรธb baseret pรฅ multiplikationen af โ€‹โ€‹bรฅde pris- og mรฆngdevรฆrdier.

ng-model i AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="" ng-init="quantity=1;price=5">

    People : <input type="number" ng-model="quantity">

    Registration Price : <input type="number" ng-model="price">

    Total : {{quantity * price}}

</div>

</body>
</html>

Code Forklaring:

  1. ng-init direktivet tilfรธjes til vores div tag for at definere 2 lokale variabler; den ene kaldes "mรฆngde", og den anden er "pris".
  2. Nu bruger vi ng-modeldirektivet til at binde tekstboksene "People" og "Registration price" til vores lokale variabler "quantity" og "price" henholdsvis.
  3. Til sidst viser vi totalen via et udtryk, som er multiplikationen af โ€‹โ€‹mรฆngde- og prisvariablerne.

Hvis koden udfรธres korrekt, vises nedenstรฅende output.

Output:

ng-model i AngularJS

  • Outputtet viser tydeligt multiplikationen af โ€‹โ€‹vรฆrdierne for personer og registreringspris.

Hvis du nu รฆndrer vรฆrdien af โ€‹โ€‹Personer og Registreringspris i tekstfelterne, รฆndres Totalen automatisk.

ng-model i AngularJS

  • Ovenstรฅende output viser blot styrken ved databinding i AngularJS, hvilket opnรฅs ved hjรฆlp af ng-model direktiv.

Den sidste af de fire hรฅndterer mange vรฆrdier pรฅ รฉn gang.

ng-gentag i AngularJS

Dette bruges til at gentage et HTML-element. Eksemplet nedenfor viser, hvordan du bruger ng-gentag direktiv.

Eksempel pรฅ ng-repeat

I dette eksempel

  • Vi kommer til at have en matrix af kapitelnavne i en matrixvariabel og
  • brug derefter ng-repeat-direktivet til at vise hvert element i arrayet som et listeelement

ng-gentag i AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<h1> Guru99 Global Event</h1>

<div ng-app="" ng-init="chapters=['Controllers','Models','Filters']">
    <ul>
        <li ng-repeat="names in chapters">
            {{names}}
        </li>
    </ul>

</div>

</body>
</html>

Code Forklaring:

  1. ng-init-direktivet er tilfรธjet til vores div-tag for at definere en variabel kaldet "kapitler", som er en array-variabel, der indeholder 3 strenge.
  2. ng-repeat-elementet bruges ved at erklรฆre en inline-variabel kaldet "navne" og gรฅ gennem hvert element i kapitel-arrayet.
  3. Til sidst viser vi vรฆrdien af โ€‹โ€‹den lokale inline-variabel 'navne'.

Hvis koden udfรธres korrekt, vises nedenstรฅende output.

Output:

ng-gentag i AngularJS

  • Ovenstรฅende output viser blot, at ng-repeat-direktivet tog hver vรฆrdi i arrayet kaldet "kapitler" og oprettede HTML-listeelementer for hvert element i arrayet.

Disse fire dรฆkker opstart, data, binding og gentagelse. Listen nedenfor viser, hvad der kommer derefter.

Andre almindeligt anvendte indbyggede AngularJS-direktiver

De fire ovenstรฅende direktiver er startsรฆttet, ikke hele biblioteket. Hver post nedenfor er en attribut, som du placerer direkte pรฅ det element, den kontrollerer.

  • ng-bind: Skriver en omfangsvรฆrdi i et elements tekst uden kortvarigt at vise rรฅ parenteser ved indlรฆsning.
  • ng-hvis: Fjerner elementet fra DOM'en, nรฅr dets udtryk er falsk, og genopbygger det, nรฅr det er sandt.
  • ng-show og ng-hide: Togglsynlighed med CSS. Elementet forbliver i DOM'en, sรฅ gentagne skift koster mindre.
  • ng-klasse: Tilfรธjer eller fjerner CSS-klasser fra et udtryk, sรฅ stylingen fรธlger modellen.
  • ng-klik: Kรธrer et udtryk eller en scope-funktion, nรฅr brugeren klikker pรฅ elementet.
  • ng-controller: Tilslutter en controller til en markup-blok, nรฅr siden vokser ud af ng-init.
  • ng-deaktiveret og ng-skrivebeskyttet: Angiv den matchende form-attribut, nรฅr deres udtryk er sandt.

De ofte stillede spรธrgsmรฅl nedenfor besvarer de spรธrgsmรฅl, der oftest fรธlger efter denne liste.

Ofte Stillede Spรธrgsmรฅl

AngularJS normaliserer attributnavne, fรธr de matches. Den fjerner ethvert x- eller data-prรฆfiks og konverterer derefter bindestreg-, kolon- eller understregningsseparatorer til camel-bogstaver. Derfor bruger data-ng-app, x-ng-app og ng:app alle den samme ngApp-direktiv.

Begge udskriver en scope-vรฆrdi. Et interpolationsudtryk kan kortvarigt vise sine rรฅ parenteser, fรธr AngularJS er fรฆrdig med at indlรฆse, mens ng-bind lader elementet vรฆre tomt, indtil kompileringen er fรฆrdig. Foretrรฆk ng-bind til tekst, der vises over fold.

Nej. Den officielle support til AngularJS sluttede i januar 2022, sรฅ der udgives ikke yderligere programrettelser. Eksisterende sider fortsรฆtter med at fungere, men nye projekter bรธr starte pรฅ moderne Angular, hvor disse direktiver bliver til komponenter og strukturelle direktiver sรฅsom *ngIf og *ngFor.

Delvist. Assistenter som f.eks. GitHub Copilot Omskriv ng-repeat som *ngFor og ng-if som *ngIf pรฅlideligt. Arv af omfang, tovejsbindinger og brugerdefinerede linkfunktioner krรฆver stadig en menneskelig gennemgang, fรธr den migrerede kode sendes.

Indsรฆt markup'en, modulerklรฆringen og konsoloutputtet i ChatGPT og spรธrg hvilken direktiv der ikke matchede. Den finder normalt en manglende ng-app, en stavet attribut eller en restrict-vรฆrdi, der blokerer din valgte syntaks.

Opsummer dette indlรฆg med: