AngularJS-avhengighetsinjeksjonskomponenter
โก Smart oppsummering
Avhengighetsinjeksjon i AngularJS hรฅndterer komponenter til objektene de er avhengige av i stedet for รฅ la dem bygge disse objektene selv, slik at kontrollere mottar tjenester som $http fra rammeverksinjektoren under kjรธretid.
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.
โ ๏ธ Versjonsmerknad: Stรธtten for AngularJS ble avsluttet i januar 2022, uten sikkerhetsoppdateringer. Moderne Angular injiserer gjennom @Injectable-leverandรธrer og injisere()Koden nedenfor forblir historisk.
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 veiledningen skal vi se mer pรฅ avhengighetsinjeksjon og hvordan dette oppnรฅs i AngularJS.
Hvilken komponent kan injiseres som en avhengighet i AngularJS
I AngularJS 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.
En AngularJS moduler registrerer injiserbare objekter gjennom fem oppskrifter.
| Oppskrift | Hva den registrerer |
|---|---|
| verdi | Et klart objekt, usynlig for konfigurasjonsblokker |
| fabrikk | En funksjon hvis returverdi injiseres |
| tjeneste | En konstruktรธr instansiert รฉn gang med new |
| leverandรธr | En konfigurerbar oppskrift som eksponerer $get |
| konstant | En fast verdi som kan leses i konfigurasjonsblokker |
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 AngularJS gir deretter en instans av $http-tjenesten til kontrolleren vรฅr for videre behandling.
Annotasjonsskjemaer: Implisitt annotering leser parameternavn, sรฅ minifisering รธdelegger den. Bรฅde innebygd array-notasjon og $inject overlever den; ng-strict-di pรฅ ng-app avviser implisitt annotasjon.
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รฅ รฅ lage en enkel JavaScript objektet og sender det til kontrolleren for videre behandling.
Dette implementeres ved รฅ bruke de to trinnene nedenfor
Trinn 1) Lag en JavaSkriptobjektet ved รฅ bruke verdi-komponenten og koble det til din hoved AngularJS-modul.
Verdikomponenten tar pรฅ seg to parametere; den ene er nรธkkelen, og den andre er verdien av JavaSkriptobjektet som opprettes.
Trinn 2) ร pne JavaSkriptobjekt fra 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 ovenfor utfรธrer trinnene nedenfor
-
sampleApp.value("TutorialID", 5);Verdifunksjonen til AngularJS-modulen brukes til รฅ opprette et nรธkkel-verdi-par kalt ยซTutorialIDยป og verdien ยซ5ยป.
-
sampleApp.controller('AngularJSController', function ($scope,TutorialID)
TutorialID-variabelen blir nรฅ tilgjengelig for kontrolleren som en funksjonsparameter.
-
$scope.ID =TutorialID;
Verdien av TutorialID, som er 5, blir nรฅ tilordnet en annen variabel kalt ID i $omfang objekt. Dette gjรธres slik at verdien 5 kan sendes 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 AngularJS som, nรฅr den injiseres i kontrollerne 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 oppretter vi en ny tjeneste kalt ยซAdditionServiceยป ved รฅ bruke serviceparameteren til vรฅr hovedmodul i AngularJS.
-
this.ADDITION = function(a,b)
Her oppretter vi en ny funksjon kalt ADDITION i tjenesten vรฅr. Dette betyr at nรฅr AngularJS instansierer AdditionService i kontrolleren vรฅr, vil vi kunne fรฅ tilgang til ยซADDITIONยป-funksjonen. I denne funksjonsdefinisjonen sier vi at denne funksjonen godtar to parametere, a og b.
-
return a+b;Her definerer vi hoveddelen av ADDITION-funksjonen vรฅr, som ganske enkelt legger sammen parametrene og returnerer den additive verdien.
-
mainApp.controller('DemoController', function($scope, AdditionService)
Dette er hovedtrinnet som involverer avhengighetsinjeksjon. I kontrollerdefinisjonen vรฅr refererer vi nรฅ til tjenesten vรฅr ยซAdditionServiceยป. Nรฅr AngularJS ser dette, vil den instansiere et objekt av typen ยซAdditionServiceยป.
-
$scope.result = AdditionService.ADDITION(5,6);
Vi fรฅr nรฅ tilgang til funksjonen ยซADDITIONยป som er definert i tjenesten vรฅr, 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.


