AngularJS-beroendeinjektionskomponenter
โก Smart sammanfattning
Beroendeinjektion i AngularJS delar ut komponenter till de objekt de fรถrlitar sig pรฅ istรคllet fรถr att lรฅta dem bygga dessa objekt sjรคlva, sรฅ kontroller fรฅr tjรคnster som $http frรฅn framework-injektorn vid kรถrning.
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.
โ ๏ธ Versionsinformation: Stรถdet fรถr AngularJS upphรถrde i januari 2022, utan sรคkerhetsuppdateringar. Modern Angular injicerar via @Injectable-leverantรถrer och injicera()Koden nedan fรถrblir historisk.
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 den hรคr handledningen kommer vi att titta mer pรฅ beroendeinjektion och hur detta รฅstadkoms i AngularJS.
Vilken komponent kan injiceras som ett beroende i AngularJS
I AngularJS injiceras beroenden med hjรคlp av 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.
En AngularJS modul registrerar injicerbara objekt genom fem recept.
| Receptet | Vad den registrerar |
|---|---|
| vรคrde | Ett fรคrdigt objekt, osynligt fรถr konfigurationsblock |
| fabrik | En funktion vars returvรคrde injiceras |
| service | En konstruktor instansierades en gรฅng med new |
| leverantรถr | Ett konfigurerbart recept som exponerar $get |
| konstant | Ett fast vรคrde som kan lรคsas i konfigurationsblock |
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 i AngularJS tillhandahรฅller sedan en instans av $http-tjรคnsten till vรฅr kontroller fรถr vidare bearbetning.
Annoteringsformulรคr: Implicit annotering lรคser parameternamn, sรฅ minifiering bryter det. Bรฅde inline array-notation och $inject รถverlever det; ng-strict-di pรฅ ng-app avvisar implicit annotering.
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 bygger pรฅ att skapa en enkel JavaScript objektet och skickar det till kontrollanten fรถr vidare bearbetning.
Detta implementeras med hjรคlp av de tvรฅ stegen nedan
Steg 1) Skapa en JavaSkriptobjektet med hjรคlp av value-komponenten och koppla det till din huvudsakliga AngularJS-modul.
Vรคrdekomponenten antar tvรฅ parametrar; den ena รคr nyckeln och den andra รคr vรคrdet pรฅ JavaSkriptobjekt som skapas.
Steg 2) Gรฅ till JavaSkriptobjekt frรฅn AngularJS-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>
Koden ovan utfรถr stegen nedan
-
sampleApp.value("TutorialID", 5);Funktionen vรคrde i AngularJS-modulen anvรคnds fรถr att skapa ett nyckel-vรคrde-par 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 fรถr TutorialID, som รคr 5, tilldelas nu en annan variabel som heter ID i $omfattning objekt. Detta gรถrs sรฅ att vรคrdet 5 kan skickas frรฅn kontrollenheten 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 AngularJS som, nรคr den injiceras i dina controllers, 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 i vรฅr huvudmodul i AngularJS.
-
this.ADDITION = function(a,b)
Hรคr skapar vi en ny funktion som heter ADDITION i vรฅr tjรคnst. Det betyder att nรคr AngularJS instansierar vรฅr AdditionService i vรฅr kontroller, kommer vi att 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 brรถdtexten i vรฅr ADDITION-funktion som helt enkelt adderar parametrarna och returnerar det adderade vรคrdet.
-
mainApp.controller('DemoController', function($scope, AdditionService)
Detta รคr huvudsteget som involverar beroendeinjektion. I vรฅr kontrollerdefinition refererar vi nu till vรฅr tjรคnst 'AdditionService'. Nรคr AngularJS ser detta kommer den att instansiera ett objekt av typen 'AdditionService'.
-
$scope.result = AdditionService.ADDITION(5,6);
Vi anvรคnder nu funktionen 'ADDITION' som รคr definierad i vรฅr tjรคnst och tilldelar den till kontrollenhetens $scope-objekt.
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.


