Vad är anpassat direktiv?
Ett anpassat direktiv i Angular Js är ett användardefinierat direktiv med önskad funktionalitet. Även om AngularJS har många kraftfulla direktiv direkt, krävs det vissa anpassade direktiv.
I den här handledningen lär du dig-
- Hur skapar jag ett anpassat direktiv?
- AngularJs direktiv och räckvidd
- Använda styrenheter med direktiv
- Hur man skapar återanvändningsbara direktiv
- AngularJS-direktiv och komponenter - ng-transclude
- Kapslade direktiv
- Hantering av händelser i ett direktiv
Hur skapar jag ett anpassat direktiv?
Låt oss ta en titt på ett exempel på hur vi kan skapa ett anpassat direktiv.
Det anpassade direktivet i vårt fall kommer helt enkelt att injicera en div-tagg som har texten "AngularJS Tutorial" på vår sida när direktivet kallas.
Event Registration Guru99 Global Event
Kodförklaring:
- Vi skapar först en modul för vår vinkelapplikation. Detta krävs för att skapa ett anpassat direktiv eftersom direktivet skapas med den här modulen.
- Vi skapar nu ett anpassat direktiv som heter "ngGuru" och definierar en funktion som har anpassad kod för vårt direktiv.
Notera:-
Observera att när vi definierar direktivet har vi definierat det som ngGuru med bokstaven 'G' som huvudstad. Och när vi får åtkomst till den från vår div-tagg som ett direktiv, kommer vi åt den som ng-guru. Så här förstår vinkel anpassade direktiv som definieras i en applikation. För det första bör namnet på det anpassade direktivet börja med bokstäverna 'ng'. För det andra bör bindestreck-symbolen "-" endast nämnas när man ringer till direktivet. Och för det tredje kan den första bokstaven som följer bokstäverna 'ng' när den definierar direktivet vara antingen lägre eller versaler.
- Vi använder mallparametern som en parameter definierad av Angular för anpassade direktiv. I detta definierar vi att närhelst detta direktiv används, använd bara mallen och injicera den i anropskoden.
- Här använder vi nu vårt skräddarsydda "ng-guru" -direktiv. När vi gör detta kommer nu värdet som vi definierade för vår mall "Angular JS Tutorial" att injiceras.
Om koden körs framgångsrikt visas följande utdata när du kör din kod i webbläsaren.
Produktion:
- Ovanstående utdata visar tydligt att vårt anpassade ng-guru-direktiv, som har mallen definierad för att visa en anpassad text visas i webbläsaren.
AngularJs direktiv och räckvidd
Omfattningen definieras som limet som binder styrenheten till vyn genom att hantera data mellan vyn och styrenheten.
När du skapar anpassade AngularJs-direktiv kommer de som standard att ha tillgång till omfångsobjektet i den överordnade styrenheten.
På detta sätt blir det enkelt för det anpassade direktivet att använda de data som skickas till huvudkontrollen.
Låt oss titta på ett exempel på hur vi kan använda räckvidden för en föräldrakontrollant i vårt anpassade direktiv.
Event Registration Guru99 Global Event
Kodförklaring:
- Vi skapar först en controller som heter "DemoController". I detta definierar vi en variabel som heter tutorialName och bifogar den till scope-objektet i ett uttalande - $ scope.tutorialName = "AngularJS".
- I vårt anpassade direktiv kan vi kalla variabeln "tutorialName" med hjälp av ett uttryck. Denna variabel skulle vara tillgänglig eftersom den definieras i styrenheten "DemoController", som skulle bli förälder för detta direktiv.
- Vi refererar till styrenheten i en div-tagg, som fungerar som vår moder div-tagg. Observera att detta måste göras först för att vårt anpassade direktiv ska få åtkomst till variabeln tutorialName.
- Slutligen bifogar vi bara vårt anpassade direktiv "ng-guru" till vår div-tagg.
Om koden körs framgångsrikt visas följande utdata när du kör din kod i webbläsaren.
Produktion:
- Ovanstående utdata visar tydligt att vårt anpassade direktiv "ng-guru" använder omfattningsvariabeln tutorialName i den överordnade styrenheten.
Använda styrenheter med direktiv
Angular ger möjlighet att komma åt styrenhetens medlemsvariabel direkt från anpassade direktiv utan behov av scope-objektet.
Detta blir ibland nödvändigt eftersom du i ett program kan ha objekt med flera omfång som tillhör flera styrenheter.
Så det finns en stor chans att du kan göra misstaget att få åtkomst till omfångsobjektet för fel styrenhet.
I sådana scenarier finns det ett sätt att specifikt nämna att säga "Jag vill komma åt denna specifika styrenhet" från mitt direktiv.
Låt oss titta på ett exempel på hur vi kan uppnå detta.
Event Registration Guru99 Global Event
Kodförklaring:
- Vi skapar först en controller som heter "DemoController". I detta kommer vi att definiera en variabel som heter "tutorialName" och den här gången istället för att fästa den till scope-objektet, kommer vi att fästa den direkt till styrenheten.
- I vårt anpassade direktiv nämner vi specifikt att vi vill använda styrenheten "DemoController" med hjälp av kontrollparameterns nyckelord.
- Vi skapar en referens till styrenheten med parametern "controllerAs". Detta definieras av Angular och är sättet att referera till regulatorn som en referens.
Obs: - Det är möjligt att komma åt flera styrenheter i ett direktiv genom att ange respektive block för styrenheten, controllerAs och malluttalanden.
- Slutligen, i vår mall, använder vi referensen som skapades i steg 3 och använder medlemsvariabeln som fästes direkt till styrenheten i steg 1.
Om koden körs framgångsrikt visas följande utdata när du kör din kod i webbläsaren.
Produktion:
Utgången visar tydligt att det anpassade direktivet särskilt har åtkomst till DemoController och medlemsvariabeln tutorialName som är bifogad och visar texten "Angular".
Hur man skapar återanvändningsbara direktiv
Vi såg redan kraften i anpassade direktiv, men vi kan ta det till nästa nivå genom att bygga våra egna återanvändbara direktiv.
Låt oss till exempel säga att vi ville injicera kod som alltid skulle visa nedanstående HTML-taggar över flera skärmar, vilket i grunden bara är en inmatning för "Namn" och "ålder" för användaren.
För att återanvända denna funktion på flera skärmar utan kodning varje gång skapar vi en huvudkontroll eller ett direktiv i vinkel för att hålla dessa kontroller ("Namn" och "ålder" för användaren).
Så nu, istället för att ange samma kod för skärmen nedan varje gång, kan vi faktiskt bädda in den här koden i ett direktiv och bädda in det direktivet när som helst.
Låt oss se ett exempel på hur vi kan uppnå detta.
Event Registration Guru99 Global Event
Kodförklaring:
- I vårt kodavsnitt för ett anpassat direktiv, det som ändras är bara det värde som ges till mallparametern i vårt anpassade direktiv.
I stället för en plan fem-tagg eller text, skriver vi faktiskt in hela fragmentet med två ingångskontroller för "Namn" och "ålder" som måste visas på vår sida.
Om koden körs framgångsrikt visas följande utdata när du kör din kod i webbläsaren.
Produktion:
Från ovanstående utdata kan vi se att kodavsnittet från mallen för det anpassade direktivet läggs till på sidan.
AngularJS-direktiv och komponenter - ng-transclude
Som vi nämnde ganska tidigare är Angular tänkt att utöka HTML-funktionaliteten. Och vi har redan sett hur vi kan få kodinjektion genom att använda anpassade återanvändbara direktiv.
Men i den moderna webbapplikationsutvecklingen finns det också ett koncept att utveckla webbkomponenter. Vilket innebär i grunden att vi skapar egna HTML-taggar som kan användas som komponenter i vår kod.
Därför ger vinkel ytterligare kraft för att förlänga HTML-taggar genom att ge möjlighet att injicera attribut i själva HTML-taggarna.
Detta görs med taggen " ng-transclude ", som är en slags inställning för att berätta vinkeln att fånga allt som placeras i direktivet i markeringen.
Låt oss ta ett exempel på hur vi kan uppnå detta.
Event Registration Guru99 Global Event
Angular JS
Kodförklaring:
- Vi använder direktivet för att definiera en anpassad HTML-tagg som kallas "pane" och lägger till en funktion som kommer att lägga till någon anpassad kod för den här taggen. I utgången kommer vår anpassade rutan att visa texten "AngularJS" i en rektangel med en heltäckande svart kant.
- Attributet "transclude" måste nämnas som sant, vilket krävs av vinkel för att injicera denna tagg i vår DOM.
- I omfånget definierar vi ett titelattribut. Attribut definieras normalt som namn / värdepar som: namn = "värde". I vårt fall är namnet på attributet i vår HTML-tagg "title". Symbolen "@" är kravet från vinkel. Detta görs så att när radtiteln = {{title}} körs i steg 5, läggs den anpassade koden för titelattributet till i HTML-taggen i rutan.
- Den anpassade koden för titelattributen som bara ritar en helt svart ram för vår kontroll.
- Slutligen ringer vi till vår anpassade HTML-tagg tillsammans med titelattributet som definierades.
Om koden körs framgångsrikt visas följande utdata när du kör din kod i webbläsaren.
Produktion:
- Utgången visar tydligt att titelattributet för rutan html5-taggen har ställts in till det anpassade värdet "Angular.JS".
Kapslade direktiv
Direktiv i vinkel kan kapslas. Som bara inre moduler eller funktioner på vilket programmeringsspråk som helst kan du behöva bädda in direktiv i varandra.
Du kan få en bättre förståelse för detta genom att se exemplet nedan.
I det här exemplet skapar vi två direktiv som kallas "yttre" och "inre".
- Det inre direktivet visar en text som heter "Inre".
- Medan det yttre direktivet faktiskt ringer till det inre direktivet att visa texten "Inner".
Guru99 Global Event