AngularJS-direktiv: ng-init, ng-app, ng-model & ng-repeat

โšก Smart sammanfattning

AngularJS-direktiv utรถkar vanlig HTML med nytt beteende. Markรถrerna ng-app, ng-init, ng-model och ng-repeat startar upp en applikation, sรคtter lokala data igรฅng, binder formulรคrkontroller till modellen och klonar element en gรฅng per samlingsobjekt.

  • ๐Ÿงฉ Kรคrnidรฉ: Ett direktiv รคr en markรถr pรฅ ett HTML-element som anger fรถr AngularJS-kompilatorn att koppla beteende till det.
  • ๐Ÿš€ Bootstrap Point: ng-app deklarerar rotelementet och startar AngularJS automatiskt sรฅ snart sidan laddas.
  • ๐Ÿงฎ Lokala uppgifter: ng-init tilldelar startvรคrden till scopevariabler inuti markupen, utan att nรฅgon kontrollant krรคvs.
  • ๐Ÿ”„ Tvรฅvรคgsbindning: ng-model lรคnkar en input, select eller textarea till en scope-egenskap, sรฅ redigeringar uppdaterar modellen direkt.
  • ๐Ÿ“‹ Upprepad markering: ng-repeat klonar sitt vรคrdelement en gรฅng fรถr varje objekt i en array eller ett objekt.
  • ๐ŸŽ›๏ธ Fyra รฅkallelseformer: Egenskapen restrict accepterar E, A, C och M fรถr element-, attribut-, klass- och kommentarsyntax.
  • ๐Ÿ“š Bredare bibliotek: AngularJS skickar dussintals inbyggda direktiv, bland dem ng-bind, ng-if, ng-show, ng-class och ng-click.

AngularJS-direktiv

Vad รคr Direktiv i AngularJS?

A Direktiv I AngularJS finns ett kommando som ger HTML ny funktionalitet. Nรคr AngularJS gรฅr igenom HTML-koden kommer den fรถrst att hitta direktiven pรฅ sidan och sedan tolka HTML-sidan dรคrefter. Ett enkelt exempel pรฅ ett AngularJS-direktiv, som vi har sett i tidigare kapitel, รคr "ng-model-direktivet". Detta direktiv anvรคnds fรถr att binda vรฅr datamodell till vรฅr vy.

Obs: Du kan ha grundlรคggande AngularJS-kod pรฅ en HTML-sida med direktiven ng-init, ng-repeat och ng-model utan att behรถva ha Controllers. Logiken fรถr dessa direktiv finns i AngularJS-filen som tillhandahรฅlls av GoogleControllers รคr nรคsta nivรฅs AngularJS-programmeringskonstruktioner som mรถjliggรถr affรคrslogik, men som nรคmnts รคr det inte obligatoriskt att ha en controller fรถr att en applikation ska vara en AngularJS-applikation.

Men hur kรถr en webblรคsare en?

Hur AngularJS-direktiv fungerar i HTML

Som vi definierade i inledningen รคr ett AngularJS-direktiv ett sรคtt att utรถka funktionaliteten hos htmlNรคr sidan laddas, gรฅr AngularJS-kompilatorn igenom DOM-filen, matchar varje element mot de registrerade direktiven och kopplar det beteende den hittar.

AngularJS levereras med dussintals inbyggda direktiv, plus alla du sjรคlv registrerar. De fyra som fรถrklaras nedan med bearbetade exempel, ng-app, ng-init, ng-model och ng-repeat, รคr de som nybรถrjare mรถter fรถrst. Innan dessa exempel, notera de fyra sรคtten ett direktiv kan skrivas.

Vilka รคr de fyra typerna av AngularJS-direktiv?

Ett direktiv รคr inte alltid ett attribut. AngularJS-kompilatorn kan matcha ett med hjรคlp av elementnamn, attribut, klassnamn eller kommentar, och varje direktiv deklarerar vilka former det accepterar genom sin [text/text/etc.]. restrict egenskap. Standardinstรคllningen รคr EA, sรฅ bรฅde element- och attributsyntax fungerar om du inte anger nรฅgot annat. Vรคrdet รคr viktigast nรคr du skriver ditt eget direktiv, eftersom kompilatorn ignorerar alla former som restrict-vรคrdet exkluderar.

begrรคnsa vรคrdet Matchad av Exempel pรฅ uppmรคrkning Typisk anvรคndning
E Elementnamn Fristรฅende block som รคger en mall
A Attribut Lรคgga till beteende till ett befintligt element
C Klassnamn ร„ldre markup som inte kan ta nya attribut
M Kommentar Sรคllsynt, sparad fรถr bakรฅtkompatibilitet

๐Ÿ‘ Dricks: Fรถredra element- och attributsyntax. officiell referens fรถr AngularJS-direktivet behandlar klass- och kommentarsformulรคr som รคldre alternativ. Exemplen nedan anvรคnder alla attributsyntax.

ng-app i AngularJS

Detta anvรคnds fรถr att initiera en AngularJS-applikation. Nรคr detta direktiv finns pรฅ en HTML-sida, talar det i princip om fรถr AngularJS att den hรคr HTML-sidan รคr en AngularJS-applikation.

Exempel pรฅ ng-app

Exemplet nedan visar hur man gรถr en vanlig HTML-applikation till 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>

โš ๏ธ Varning: Listningen behรฅller originalet chrset="UTF 8", exakt som publicerat. Det korrekta attributet รคr charset="UTF-8".

Code Fรถrklaring:

  1. Direktivet "ng-app" lรคggs till i vรฅr div-tagg fรถr att indikera att den hรคr applikationen รคr en AngularJS-applikation. Observera att ng-app-direktivet kan tillรคmpas pรฅ vilken tagg som helst, sรฅ det kan ocksรฅ placeras i body-taggen.
  2. Eftersom vi har definierat den hรคr applikationen som en AngularJS-applikation kan vi nu anvรคnda AngularJS-funktionaliteten. I vรฅrt fall anvรคnder vi uttryck fรถr att helt enkelt sammanfoga tvรฅ strรคngar.

Om koden kรถrs korrekt visas utdata nedan.

Produktion:

ng-app i AngularJS

Utdata visar tydligt uttryckets utdata, vilket endast mรถjliggjordes eftersom vi definierade applikationen som en AngularJS-applikation. Nรคsta direktiv tillhandahรฅller dess data.

ng-init i AngularJS

Detta anvรคnds fรถr att initiera applikationsdata. Ibland kan du behรถva lokala data fรถr din applikation, och detta kan gรถras med ng-init-direktivet.

Exempel pรฅ ng-init

I det hรคr exemplet kommer vi att skapa en variabel som heter "TutorialName" med ng-init-direktivet och visa vรคrdet fรถr den variabeln pรฅ sidan.

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 Fรถrklaring:

  1. Direktivet ng-init lรคggs till i vรฅr div-tagg fรถr att definiera en lokal variabel som heter "TutorialName" och vรคrdet som ges till detta รคr "AngularJS".
  2. Vi anvรคnder uttryck i AngularJS fรถr att visa utdata frรฅn variabelnamnet "TutorialName" som definierades i vรฅrt ng-init-direktiv.

Om koden kรถrs korrekt visas utdata nedan.

Produktion:

ng-init i AngularJS

I utgรฅngen,

  • Resultatet visar tydligt resultatet av uttrycket som innehรฅller strรคngen "AngularJS". Detta รคr som ett resultat av att strรคngen "AngularJS" tilldelas variabeln 'TutorialName' i ng-init-sektionen.

Nรคsta direktiv skickar data tillbaka frรฅn skรคrmen till modellen.

ng-modell i AngularJS

Och slutligen har vi ng-model-direktivet, som anvรคnds fรถr att binda vรคrdet av en HTML-kontroll till applikationsdata.

Exempel pรฅ ng-modell

I detta exempel,

  • Vi kommer att skapa 2 variabler som kallas "kvantitet" och "pris". Dessa variabler kommer att vara bundna till 2 textinmatningskontroller.
  • Vi kommer sedan att visa det totala beloppet baserat pรฅ multiplikationen av bรฅde pris- och kvantitetsvรคrden.

ng-modell 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 Fรถrklaring:

  1. Direktivet ng-init lรคggs till i vรฅr div-tagg fรถr att definiera 2 lokala variabler; en kallas "kvantitet" och den andra รคr "pris".
  2. Nu anvรคnder vi ng-modelldirektivet fรถr att binda textrutorna "People" och "Registration price" till vรฅra lokala variabler "kvantitet" respektive "pris".
  3. Slutligen visar vi totalen via ett uttryck, vilket รคr multiplikationen av kvantitets- och prisvariablerna.

Om koden kรถrs korrekt visas utdata nedan.

Produktion:

ng-modell i AngularJS

  • Resultatet visar tydligt multiplikationen av vรคrdena fรถr personer och registreringspris.

Om du nu รคndrar vรคrdet fรถr Personer och Registreringspris i textrutorna รคndras Totalen automatiskt.

ng-modell i AngularJS

  • Ovanstรฅende utdata visar bara kraften i databindning i AngularJS, vilket uppnรฅs med hjรคlp av ng-modelldirektivet.

Den sista av de fyra hanterar mรฅnga vรคrden samtidigt.

ng-upprepa i AngularJS

Detta anvรคnds fรถr att upprepa ett HTML-element. Exemplet nedan visar hur du anvรคnder ng-upprepa direktiv.

Exempel pรฅ ng-repeat

I detta exempel,

  • Vi kommer att ha en array av kapitelnamn i en arrayvariabel och
  • anvรคnd sedan direktivet ng-repeat fรถr att visa varje element i arrayen som ett listobjekt

ng-upprepa 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 Fรถrklaring:

  1. ng-init-direktivet lรคggs till i vรฅr div-tagg fรถr att definiera en variabel som heter "chapters" som รคr en arrayvariabel som innehรฅller 3 strรคngar.
  2. Elementet ng-repeat anvรคnds genom att deklarera en inline-variabel som kallas "namn" och gรฅ igenom varje element i kapitelmatrisen.
  3. Slutligen visar vi vรคrdet pรฅ den lokala inline-variabeln "namn".

Om koden kรถrs korrekt visas utdata nedan.

Produktion:

ng-upprepa i AngularJS

  • Ovanstรฅende utdata visar bara att ng-repeat-direktivet tog varje vรคrde i arrayen som kallas "kapitel" och skapade HTML-listobjekt fรถr varje objekt i arrayen.

Dessa fyra tรคcker uppstart, data, bindning och repetition. Listan nedan visar vad som hรคnder hรคrnรคst.

Andra vanligt fรถrekommande inbyggda AngularJS-direktiv

De fyra direktiven ovan รคr startmรคngden, inte hela biblioteket. Varje post nedan รคr ett attribut som du placerar direkt pรฅ det element den kontrollerar.

  • ng-bindning: Skriver ett omfรฅngsvรคrde i ett elements text utan att kortfattat visa rรฅa klammerparenteser vid inlรคsning.
  • ng-om: Tar bort elementet frรฅn DOM-koden nรคr dess uttryck รคr falskt och รฅteruppbygger det nรคr det รคr sant.
  • ng-visa och ng-dรถlja: Togglsynlighet med CSS. Elementet stannar kvar i DOM:en, sรฅ upprepade vรคxlingar kostar mindre.
  • ng-klass: Lรคgger till eller tar bort CSS-klasser frรฅn ett uttryck, sรฅ att stilen fรถljer modellen.
  • ng-klicka: Kรถr ett uttryck eller en scope-funktion nรคr anvรคndaren klickar pรฅ elementet.
  • ng-kontroller: Kopplar en kontroller till ett markupblock nรคr sidan vรคxer ur ng-init.
  • ng-inaktiverad och ng-skrivskyddad: Stรคll in attributet matchande form nรคr deras uttryck รคr sant.

Vanliga frรฅgor och svar nedan besvarar de frรฅgor som oftast fรถljer efter den hรคr listan.

Vanliga frรฅgor

AngularJS normaliserar attributnamn innan de matchas. Den tar bort alla x- eller data-prefix och konverterar sedan bindestreck, kolon eller understreck till camel case-tecken. Det รคr dรคrfรถr data-ng-app, x-ng-app och ng:app alla anvรคnder samma ngApp-direktiv.

Bรฅda skriver ut ett scope-vรคrde. Ett interpoleringsuttryck kan kort visa sina rรฅa klammerparenteser innan AngularJS slutfรถr laddningen, medan ng-bind lรคmnar elementet tomt tills kompileringen รคr klar. Fรถredra ng-bind fรถr text som visas ovanfรถr vikningen.

Nej. Det officiella stรถdet fรถr AngularJS upphรถrde i januari 2022, sรฅ inga ytterligare patchar slรคpps. Befintliga sidor fortsรคtter att fungera, men nya projekt bรถr starta pรฅ moderna Angular, dรคr dessa direktiv blir komponenter och strukturella direktiv som *ngIf och *ngFor.

Delvis. Assistenter som GitHub Copilot Skriv om ng-repeat som *ngFor och ng-if som *ngIf pรฅ ett tillfรถrlitligt sรคtt. Arv av omfรฅng, tvรฅvรคgsbindningar och anpassade lรคnkfunktioner behรถver fortfarande granskas av mรคnniskor innan den migrerade koden skickas.

Klistra in markupen, moduldeklarationen och konsolutdata i ChatGPT och frรฅga vilket direktiv som inte matchade. Den hittar vanligtvis en saknad ng-app, ett felstavat attribut eller ett restrict-vรคrde som blockerar din valda syntax.

Sammanfatta detta inlรคgg med: