AngularJS Dependency Injection: Vilka komponenter som injiceras
Vad รคr Dependency Injection i AngularJS?
Beroende pรฅ injektion i AngularJS รคr ett mjukvarudesignmรถnster som implementerar inversion av kontroll fรถr att lรถsa beroenden. Det bestรคmmer hur komponenter hรฅller sina beroenden. Den kan anvรคndas nรคr komponenterna definieras eller modulens kรถrnings- och konfigurationsblock. Det gรถr att du kan gรถra komponenterna รฅteranvรคndbara, testbara och underhรฅllsbara.
Inversion av kontroll: Det betyder att objekt inte skapar andra objekt som de fรถrlitar sig pรฅ fรถr att utfรถra sitt arbete. Istรคllet fรฅr de dessa fรถremรฅl frรฅn en extern kรคlla. Detta utgรถr grunden fรถr AngularJS Dependency Injection dรคr om ett objekt รคr beroende av ett annat; det primรคra objektet tar inte ansvaret fรถr att skapa det beroende objektet och sedan anvรคnda dess metoder. Istรคllet skapar en extern kรคlla (som i AngularJS รคr sjรคlva ramverket AngularJS) det beroende objektet och ger det till kรคllobjektet fรถr vidare anvรคndning.
Sรฅ lรฅt oss fรถrst fรถrstรฅ vad ett beroende รคr.
Diagrammet ovan visar ett enkelt AngularJS-beroendeinjektionsexempel pรฅ en vardaglig ritual i databasprogrammering.
- Rutan 'Modell' visar "Modelklassen" som normalt skapas fรถr att interagera med databasen. Sรฅ nu รคr databasen ett beroende fรถr att "Model class" ska fungera.
- Genom beroendeinjektion skapar vi en tjรคnst fรถr att ta all information frรฅn databasen och komma in i modellklassen.
I resten av denna handledning kommer vi att titta mer pรฅ beroendeinjektion och hur detta รฅstadkoms i AngularJS.
Vilken komponent kan injiceras som ett beroende i AngularJS?
I Angular.JS injiceras beroenden genom att anvรคnda en "injicerbar fabriksmetod" eller "konstruktorfunktion".
Dessa komponenter kan injiceras med "service" och "vรคrde" komponenter som beroenden. Vi har sett detta i ett tidigare รคmne med $http-tjรคnsten.
Vi har redan sett att $http-tjรคnsten kan anvรคndas inom AngularJS fรถr att hรคmta data frรฅn en MySQL eller MS SQL Serverdatabas via en PHP webbapplikation.
$http-tjรคnsten definieras normalt inifrรฅn styrenheten pรฅ fรถljande sรคtt.
sampleApp.controller ('AngularJSController', function ($scope, $http)
Nu nรคr $http-tjรคnsten รคr definierad i styrenheten som visas ovan. Det betyder att styrenheten nu har ett beroende av $http-tjรคnsten.
Sรฅ nรคr ovanstรฅende kod exekveras kommer AngularJS att utfรถra fรถljande steg;
- Kontrollera om "$http-tjรคnsten" har instansierats. Eftersom vรฅr "kontroller" nu รคr beroende av "$http-tjรคnsten", mรฅste ett objekt fรถr denna tjรคnst gรถras tillgรคngligt fรถr vรฅr kontrollant.
- Om AngularJS fรฅr reda pรฅ att $http-tjรคnsten inte รคr instansierad, anvรคnder AngularJS funktionen 'factory' fรถr att konstruera ett $http-objekt.
- Injektorn inom Angular.JS tillhandahรฅller sedan en instans av $http-tjรคnsten till vรฅr styrenhet fรถr vidare bearbetning.
Nu nรคr beroendet injiceras i vรฅr styrenhet kan vi nu anropa de nรถdvรคndiga funktionerna inom $http-tjรคnsten fรถr vidare bearbetning.
Exempel pรฅ Dependency Injection
I det hรคr exemplet kommer vi att lรคra oss hur man anvรคnder beroendeinjektion i AngularJS.
Beroendeinjektion kan implementeras pรฅ 2 sรคtt
- En รคr genom "Vรคrdekomponenten"
- En annan รคr genom en "tjรคnst"
Lรฅt oss titta pรฅ genomfรถrandet av bรฅda sรคtten mer i detalj.
1) Vรคrdekomponent
Detta koncept รคr baserat pรฅ det faktum att skapa en enkel JavaScript objektet och skicka det till den registeransvarige fรถr vidare behandling.
Detta implementeras med hjรคlp av de tvรฅ stegen nedan
Steg 1) Skapa en JavaSkriptobjekt genom att anvรคnda vรคrdekomponenten och bifoga det till din huvudmodul AngularJS.JS.
Vรคrdekomponenten antar tvรฅ parametrar; den ena รคr nyckeln och den andra รคr vรคrdet pรฅ det javascript-objekt som skapas.
Steg 2) Gรฅ till JavaSkriptobjekt frรฅn Angular.JS-kontroller
<! DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Event Registration</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body ng-app="sampleApp">
<div ng-controller="AngularJSController">
<h3> Guru99 Global Event</h3>
{{ID}}
</div>
<script>
var sampleApp = angular.module('sampleApp',[]);
sampleApp.value("TutorialID", 5);
sampleApp.controller('AngularJSController', function($scope,TutorialID) {
$scope.ID =TutorialID;
});
</script>
</body>
</html>
I ovanstรฅende kodexempel utfรถrs huvudstegen nedan
-
sampleApp.value("TutorialID", 5);
Vรคrdefunktionen fรถr Angular.JS JS-modulen anvรคnds fรถr att skapa ett nyckel-vรคrdepar som heter "TutorialID" och vรคrdet "5".
-
sampleApp.controller('AngularJSController', function ($scope,TutorialID)
Variabeln TutorialID blir nu tillgรคnglig fรถr styrenheten som en funktionsparameter.
-
$scope.ID =TutorialID;
Vรคrdet pรฅ TutorialID som รคr 5, tilldelas nu en annan variabel som heter ID i $scope-objektet. Detta gรถrs sรฅ att vรคrdet 5 kan รถverfรถras frรฅn styrenheten till vyn.
-
{{ID}}
ID-parametern visas i vyn som ett uttryck. Sรฅ resultatet av '5' kommer att visas pรฅ sidan.
Nรคr ovanstรฅende kod exekveras, kommer utdata att visas enligt nedan
2) Service
Service definieras som en singel JavaSkriptobjekt som bestรฅr av en uppsรคttning funktioner som du vill exponera och injicera i din kontroller.
Till exempel รคr "$http" en tjรคnst i Angular.JS som nรคr den injiceras i dina kontroller tillhandahรฅller de nรถdvรคndiga funktionerna fรถr
( get() , query() , save() , remove(), delete() ).
Dessa funktioner kan sedan anropas frรฅn din styrenhet i enlighet med detta.
Lรฅt oss titta pรฅ ett enkelt exempel pรฅ hur du kan skapa din egen tjรคnst. Vi kommer att skapa en enkel tillรคggstjรคnst som lรคgger till tvรฅ nummer.
<! DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Event Registration</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>
<h3> Guru99 Global Event</h3>
<div ng-app = "mainApp" ng-controller = "DemoController">
<p>Result: {{result}}</p>
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.service('AdditionService', function(){
this.ADDITION = function(a,b) {
return a+b;
}
});
mainApp.controller('DemoController', function($scope, AdditionService) {
$scope.result = AdditionService.ADDITION(5,6);
});
</script>
</body>
</html>
I exemplet ovan utfรถrs fรถljande steg
-
mainApp.service('AdditionService', function()
Hรคr skapar vi en ny tjรคnst som heter 'AdditionService' med hjรคlp av serviceparametern fรถr vรฅr huvudmodul AngularJS JS.
-
this.Addition = function(a,b)
Hรคr skapar vi en ny funktion som heter Tillรคgg inom vรฅr tjรคnst. Detta innebรคr att nรคr AngularJS instansierar vรฅr AdditionService inuti vรฅr styrenhet, skulle vi dรฅ kunna komma รฅt funktionen 'Addition'. I denna funktionsdefinition sรคger vi att den hรคr funktionen accepterar tvรฅ parametrar, a och b.
-
return a+b;
Hรคr definierar vi kroppen fรถr vรฅr tillรคggsfunktion som helt enkelt lรคgger till parametrarna och returnerar mervรคrdet.
-
mainApp.controller('DemoController', function($scope, AdditionService)
Detta รคr huvudsteget som involverar beroendeinjektion. I vรฅr controllerdefinition hรคnvisar vi nu till vรฅr 'AdditionService'-tjรคnst. Nรคr AngularJS ser detta, kommer det att instansiera ett objekt av typen 'AdditionService'.
-
$scope.result = AdditionService.Addition(5,6);
Vi kommer nu รฅt funktionen 'Addition' som รคr definierad i vรฅr tjรคnst och tilldelar den till $scope-objektet fรถr kontrollern.
Sรฅ det hรคr รคr ett enkelt exempel pรฅ hur vi kan definiera vรฅr tjรคnst och injicera funktionaliteten fรถr den tjรคnsten inuti vรฅr styrenhet.
Sammanfattning
- Dependency Injection som namnet antyder รคr processen att injicera beroende funktionalitet i moduler under kรถrning.
- Att anvรคnda beroendeinjektion hjรคlper till att fรฅ en mer รฅteranvรคndbar kod. Om du hade gemensam funktionalitet som anvรคnds รถver flera applikationsmoduler, รคr det bรคsta sรคttet att definiera en central tjรคnst med den funktionen och sedan injicera den tjรคnsten som ett beroende i dina applikationsmoduler.
- Vรคrdeobjektet fรถr AngularJS kan anvรคndas fรถr att injicera enkelt JavaSkriptobjekt i din kontroller med $inject in AngularJS.
- Servicemodulen kan anvรคndas fรถr att definiera dina anpassade tjรคnster som kan รฅteranvรคndas รถver flera AngularJS-moduler.


