Komponente za ubrizgavanje ovisnosti u AngularJS-u
โก Pametni saลพetak
Ubrizgavanje ovisnosti u AngularJS-u daje komponentama objekte na koje se oslanjaju umjesto da im dopusti da same izgrade te objekte, tako da kontroleri primaju usluge poput $http od injektora okvira tijekom izvoฤenja.
ล to je ubrizgavanje ovisnosti u AngularJS?
Injekcija ovisnosti u AngularJS je obrazac dizajna softvera koji implementira inverziju kontrole za rjeลกavanje ovisnosti. Odluฤuje kako komponente drลพe svoje ovisnosti. Moลพe se koristiti tijekom definiranja komponenti ili pruลพanja run i config blokova modula. Omoguฤuje vam da komponente uฤinite ponovno upotrebljivim, testiranim i odrลพavanim.
Inverzija kontrole: To znaฤi da objekti ne stvaraju druge objekte na koje se oslanjaju da obave svoj posao. Umjesto toga, oni dobivaju te predmete iz vanjskog izvora. Ovo ฤini osnovu AngularJS Dependency Injection pri ฤemu ako jedan objekt ovisi o drugom; primarni objekt ne preuzima odgovornost za kreiranje ovisnog objekta i zatim koristi njegove metode. Umjesto toga, vanjski izvor (koji je u AngularJS-u sam okvir AngularJS) stvara zavisni objekt i daje ga izvornom objektu na daljnju upotrebu.
โ ๏ธ Napomena o verziji: Podrลกka za AngularJS zavrลกila je u sijeฤnju 2022., bez sigurnosnih zakrpa. Moderni Angular ubrizgava putem @Injectable pruลพatelja usluga i ubrizgati()Donji kod ostaje povijesni.
Dakle, prvo shvatimo ลกto je ovisnost.
Gornji dijagram prikazuje jednostavan primjer AngularJS ubrizgavanja zavisnosti svakodnevnog rituala u programiranju baze podataka.
- Okvir 'Model' prikazuje "klasu modela" koja se inaฤe stvara za interakciju s bazom podataka. Sada je baza podataka ovisnost o funkcioniranju "klase modela".
- Injektiranjem ovisnosti stvaramo uslugu za preuzimanje svih informacija iz baze podataka i ulazak u klasu modela.
U ostatku ovog tutorijala, detaljnije ฤemo se pozabaviti ubrizgavanjem ovisnosti i kako se to postiลพe u AngularJS.
Koja se komponenta moลพe ubrizgati kao ovisnost u AngularJS-u
U AngularJS-u, ovisnosti se ubrizgavaju pomoฤu "injectabilne tvorniฤke metode" ili "konstruktorske funkcije".
Ove komponente mogu se ubaciti s komponentama "usluga" i "vrijednost" kao ovisnosti. To smo vidjeli u prethodnoj temi s uslugom $http.
AngularJS modul registrira injektirane objekte putem pet recepata.
| Recept | ล to registrira |
|---|---|
| vrijednost | Spreman objekt, nevidljiv za konfiguracijske blokove |
| tvornica | Funkcija ฤija se povratna vrijednost ubrizgava |
| usluga | Konstruktor instanciran jednom s new |
| davatelj | Konfigurabilni recept koji otkriva $get |
| konstanta | Fiksna vrijednost koja se moลพe ฤitati u konfiguracijskim blokovima |
Veฤ smo vidjeli da se $http usluga moลพe koristiti unutar AngularJS-a za dobivanje podataka iz a MySQL ili MS SQL Baza podataka posluลพitelja putem a PHP web aplikacija.
Usluga $http obiฤno se definira unutar kontrolera na sljedeฤi naฤin.
sampleApp.controller ('AngularJSController', function ($scope, $http)
Sada kada je usluga $http definirana u kontroleru kao ลกto je prikazano gore. To znaฤi da kontroler sada ovisi o $http usluzi.
Dakle, kada se gornji kod izvrลกi, AngularJS ฤe izvesti sljedeฤe korake;
- Provjerite je li "$http usluga" instancirana. Buduฤi da naลก โkontrolorโ sada ovisi o โ$http servisuโ, objekt ove usluge mora biti dostupan naลกem kontroleru.
- Ako AngularJS otkrije da $http usluga nije instancirana, AngularJS koristi 'tvorniฤku' funkciju za konstruiranje $http objekta.
- Injektor unutar AngularJS-a zatim pruลพa instancu $http servisa naลกem kontroleru za daljnju obradu.
Obrasci za biljeลกke: Implicitna anotacija ฤita imena parametara, pa ga minifikacija prekida. Inline array notacija i $inject ga preลพivljavaju; ng-strict-di na ng-app odbacuje implicitnu anotaciju.
Sada kada je ovisnost umetnuta u naลก kontroler, sada moลพemo pozvati potrebne funkcije unutar $http usluge za daljnju obradu.
Primjer ubrizgavanja ovisnosti
U ovom primjeru nauฤit ฤemo kako koristiti ubrizgavanje ovisnosti u AngularJS.
Injekcija ovisnosti moลพe se implementirati na 2 naฤina
- Jedan je kroz "komponentu vrijednosti"
- Drugi je putem "Usluge"
Pogledajmo detaljnije provedbu oba naฤina.
1) Vrijednosna komponenta
Ovaj koncept se temelji na stvaranju jednostavnog JavaScript objekt i njegovo prosljeฤivanje kontroleru na daljnju obradu.
Ovo se provodi pomoฤu sljedeฤa dva koraka
Korak 1) Napravite JavaSkriptirajte objekt koristeฤi komponentu value i priloลพite ga svom glavnom AngularJS modulu.
Vrijednosna komponenta poprima dva parametra; jedan je kljuฤ, a drugi je vrijednost JavaObjekt skripte koji se kreira.
Korak 2) Pristupite JavaObjekt skripte iz AngularJS kontroler
<! 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>
Gornji kod izvrลกava sljedeฤe korake
-
sampleApp.value("TutorialID", 5);Funkcija value AngularJS modula koristi se za stvaranje para kljuฤ-vrijednost pod nazivom โTutorialIDโ i vrijednosti โ5โ.
-
sampleApp.controller('AngularJSController', function ($scope,TutorialID)
Varijabla TutorialID sada postaje dostupna kontroleru kao funkcijski parametar.
-
$scope.ID =TutorialID;
Vrijednost TutorialID-a, koja je 5, sada se dodjeljuje drugoj varijabli pod nazivom ID u $scope objekt. To se radi kako bi se vrijednost 5 mogla prenijeti s kontrolera na pogled.
-
{{ID}}ID parametar se prikazuje u prikazu kao izraz. Dakle, rezultat '5' bit ฤe prikazan na stranici.
Kada se gornji kod izvrลกi, izlaz ฤe biti prikazan kao ispod
2) Usluga
Usluga je definirana kao singleton JavaObjekt skripte koji se sastoji od skupa funkcija koje ลพelite izloลพiti i ubaciti u svoj kontroler.
Na primjer, โ$httpโ je usluga u AngularJS-u koja, kada se ubrizga u vaลกe kontrolere, pruลพa potrebne funkcije za
( get() , query() , save() , remove(), delete() ).
Te se funkcije tada mogu pozvati s vaลกeg upravljaฤa u skladu s tim.
Pogledajmo jednostavan primjer kako moลพete stvoriti vlastitu uslugu. Napravit ฤemo jednostavnu uslugu zbrajanja koja zbraja dva broja.
<! 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>
U gornjem primjeru provode se sljedeฤi koraci
-
mainApp.service('AdditionService', function()
Ovdje stvaramo novu uslugu pod nazivom 'AdditionService' koristeฤi parametar service naลกeg glavnog AngularJS modula.
-
this.ADDITION = function(a,b)
Ovdje stvaramo novu funkciju pod nazivom ADDITION unutar naลกeg servisa. To znaฤi da kada AngularJS instancira naลก AdditionService unutar naลกeg kontrolera, moฤi ฤemo pristupiti funkciji 'ADDITION'. U ovoj definiciji funkcije kaลพemo da ova funkcija prihvaฤa dva parametra, a i b.
-
return a+b;Ovdje definiramo tijelo naลกe funkcije ADDITION koja jednostavno zbraja parametre i vraฤa zbrajanu vrijednost.
-
mainApp.controller('DemoController', function($scope, AdditionService)
Ovo je glavni korak koji ukljuฤuje ubrizgavanje ovisnosti. U naลกoj definiciji kontrolera sada referenciramo naลกu uslugu 'AdditionService'. Kada AngularJS to vidi, instancirat ฤe objekt tipa 'AdditionService'.
-
$scope.result = AdditionService.ADDITION(5,6);
Sada pristupamo funkciji 'ADDITION' koja je definirana u naลกem servisu i dodjeljujemo je objektu $scope kontrolera.
Dakle, ovo je jednostavan primjer kako moลพemo definirati naลกu uslugu i ubaciti funkcionalnost te usluge u naลก kontroler.


