AngularJS Dependency Injection: Hvilke komponenter som injiseres
Hva er avhengighetsinjeksjon i AngularJS?
Avhengighetsinjeksjon i AngularJS er et programvaredesignmรธnster som implementerer inversjon av kontroll for รฅ lรธse avhengigheter. Det bestemmer hvordan komponenter holder avhengighetene sine. Den kan brukes mens du definerer komponentene eller gir kjรธre- og konfigurasjonsblokker for modulen. Det lar deg gjรธre komponentene gjenbrukbare, testbare og vedlikeholdbare.
Inversjon av kontroll: Det betyr at objekter ikke lager andre objekter som de er avhengige av for รฅ gjรธre arbeidet sitt. I stedet fรฅr de disse gjenstandene fra en ekstern kilde. Dette danner grunnlaget for AngularJS Dependency Injection hvor hvis ett objekt er avhengig av et annet; det primรฆre objektet tar ikke ansvaret for รฅ lage det avhengige objektet og deretter bruke dets metoder. I stedet oppretter en ekstern kilde (som i AngularJS er selve AngularJS-rammeverket) det avhengige objektet og gir det til kildeobjektet for videre bruk.
Sรฅ la oss fรธrst forstรฅ hva en avhengighet er.
Diagrammet ovenfor viser et enkelt AngularJS-avhengighetsinjeksjonseksempel pรฅ et dagligdags ritual i databaseprogrammering.
- 'Model'-boksen viser "Model-klassen" som vanligvis er opprettet for รฅ samhandle med databasen. Sรฅ nรฅ er databasen en avhengighet for at "modellklassen" skal fungere.
- Ved avhengighetsinjeksjon lager vi en tjeneste for รฅ hente all informasjon fra databasen og komme inn i modellklassen.
I resten av denne opplรฆringen vil vi se mer pรฅ avhengighetsinjeksjon og hvordan dette oppnรฅs i AngularJS.
Hvilken komponent kan injiseres som en avhengighet i AngularJS?
I Angular.JS injiseres avhengigheter ved รฅ bruke en "injiserbar fabrikkmetode" eller "konstruktรธrfunksjon".
Disse komponentene kan injiseres med "tjeneste" og "verdi" komponenter som avhengigheter. Vi har sett dette i et tidligere emne med $http-tjenesten.
Vi har allerede sett at $http-tjenesten kan brukes i AngularJS for รฅ hente data fra en MySQL eller MS SQL Serverdatabase via en PHP Webapplikasjon.
$http-tjenesten er normalt definert fra kontrolleren pรฅ fรธlgende mรฅte.
sampleApp.controller ('AngularJSController', function ($scope, $http)
Nรฅ nรฅr $http-tjenesten er definert i kontrolleren som vist ovenfor. Det betyr at kontrolleren nรฅ er avhengig av $http-tjenesten.
Sรฅ nรฅr koden ovenfor blir utfรธrt, vil AngularJS utfรธre fรธlgende trinn;
- Sjekk om "$http-tjenesten" har blitt instansiert. Siden vรฅr ยซkontrollerยป nรฅ er avhengig av ยซ$http-tjenestenยป, mรฅ et objekt av denne tjenesten gjรธres tilgjengelig for vรฅr kontroller.
- Hvis AngularJS finner ut at $http-tjenesten ikke er instansiert, bruker AngularJS 'fabrikk'-funksjonen til รฅ konstruere et $http-objekt.
- Injektoren i Angular.JS gir deretter en forekomst av $http-tjenesten til vรฅr kontroller for videre behandling.
Nรฅ som avhengigheten er injisert i kontrolleren vรฅr, kan vi nรฅ pรฅkalle de nรธdvendige funksjonene i $http-tjenesten for videre behandling.
Eksempel pรฅ avhengighetsinjeksjon
I dette eksemplet vil vi lรฆre hvordan du bruker avhengighetsinjeksjon i AngularJS.
Avhengighetsinjeksjon kan implementeres pรฅ 2 mรฅter
- Den ene er gjennom "Verdikomponenten"
- En annen er gjennom en "tjeneste"
La oss se pรฅ implementeringen av begge veier mer detaljert.
1) Verdikomponent
Dette konseptet er basert pรฅ det faktum รฅ lage en enkel JavaScript objektet og sende det til behandlingsansvarlig for videre behandling.
Dette implementeres ved รฅ bruke de to trinnene nedenfor
Trinn 1) Lag en JavaSkriptobjekt ved รฅ bruke verdi-komponenten og fest det til hovedmodulen AngularJS.JS.
Verdikomponenten antar to parametere; den ene er nรธkkelen, og den andre er verdien til javascript-objektet som er opprettet.
Trinn 2) ร pne JavaSkriptobjekt fra 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 kodeeksemplet ovenfor utfรธres hovedtrinnene nedenfor
-
sampleApp.value("TutorialID", 5);
Verdifunksjonen til Angular.JS JS-modulen brukes til รฅ lage et nรธkkelverdi-par kalt "TutorialID" og verdien til "5".
-
sampleApp.controller('AngularJSController', function ($scope,TutorialID)
TutorialID-variabelen blir nรฅ tilgjengelig for kontrolleren som en funksjonsparameter.
-
$scope.ID =TutorialID;
Verdien til TutorialID som er 5, blir nรฅ tildelt en annen variabel kalt ID i $scope-objektet. Dette gjรธres slik at verdien pรฅ 5 kan overfรธres fra kontrolleren til visningen.
-
{{ID}}
ID-parameteren vises i visningen som et uttrykk. Sรฅ resultatet av '5' vil vises pรฅ siden.
Nรฅr koden ovenfor er utfรธrt, vil utdataene vises som nedenfor
2) Service
Tjenesten er definert som en singleton JavaSkriptobjekt som bestรฅr av et sett med funksjoner som du รธnsker รฅ eksponere og injisere i kontrolleren.
For eksempel er "$http" en tjeneste i Angular.JS som nรฅr den injiseres i kontrollerene dine gir de nรธdvendige funksjonene til
( get() , query() , save() , remove(), delete() ).
Disse funksjonene kan deretter aktiveres fra kontrolleren din.
La oss se pรฅ et enkelt eksempel pรฅ hvordan du kan lage din egen tjeneste. Vi skal lage en enkel tilleggstjeneste som legger til to tall.
<! 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 eksemplet ovenfor utfรธres fรธlgende trinn
-
mainApp.service('AdditionService', function()
Her lager vi en ny tjeneste kalt 'AdditionService' ved รฅ bruke tjenesteparameteren til vรฅr hovedmodul AngularJS JS.
-
this.Addition = function(a,b)
Her lager vi en ny funksjon som heter Tillegg i vรฅr tjeneste. Dette betyr at nรฅr AngularJS instansierer vรฅr AdditionService inne i kontrolleren vรฅr, vil vi kunne fรฅ tilgang til 'Addition'-funksjonen. I denne funksjonsdefinisjonen sier vi at denne funksjonen aksepterer to parametere, a og b.
-
return a+b;
Her definerer vi kroppen til tilleggsfunksjonen vรฅr, som ganske enkelt legger til parameterne og returnerer tilleggsverdien.
-
mainApp.controller('DemoController', function($scope, AdditionService)
Dette er hovedtrinnet som involverer avhengighetsinjeksjon. I vรฅr kontrollerdefinisjon refererer vi nรฅ til vรฅr 'AdditionService'-tjeneste. Nรฅr AngularJS ser dette, vil det instansiere et objekt av typen "AdditionService".
-
$scope.result = AdditionService.Addition(5,6);
Vi fรฅr nรฅ tilgang til funksjonen 'Addition' som er definert i vรฅr tjeneste og tilordner den til $scope-objektet til kontrolleren.
Sรฅ dette er et enkelt eksempel pรฅ hvordan vi kan definere tjenesten vรฅr og injisere funksjonaliteten til den tjenesten inne i kontrolleren vรฅr.
Sammendrag
- Dependency Injection som navnet tilsier er prosessen med รฅ injisere avhengig funksjonalitet i moduler under kjรธretid.
- ร bruke avhengighetsinjeksjon hjelper til med รฅ ha en mer gjenbrukbar kode. Hvis du hadde felles funksjonalitet som brukes pรฅ tvers av flere applikasjonsmoduler, er den beste mรฅten รฅ definere en sentral tjeneste med den funksjonaliteten og deretter injisere den tjenesten som en avhengighet i applikasjonsmodulene dine.
- Verdiobjektet til AngularJS kan brukes til รฅ injisere enkelt JavaSkriptobjekter i kontrolleren din ved รฅ bruke $inject in AngularJS.
- Tjenestemodulen kan brukes til รฅ definere dine tilpassede tjenester som kan gjenbrukes pรฅ tvers av flere AngularJS-moduler.


