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.

  • ๐Ÿ”˜ Definicija: Inverzija upravljanja omoguฤ‡uje vanjskom injektoru da osigura svaku ovisnost koja je komponenti potrebna.
  • โ˜‘๏ธ Recepti: objekti za ubrizgavanje registra vrijednosti, tvornice, usluge, pruลพatelja usluga i konstanti.
  • โœ… Vrijednosna komponenta: Par kljuฤ-vrijednost dolazi do kontrolera kao obiฤan parametar funkcije.
  • ๐Ÿงช Usluga: Singleton objekt izlaลพe funkcije za viลกekratnu upotrebu koje kontroleri ubrizgavaju po imenu.
  • ๐Ÿ› ๏ธ primjedba: Inline array ili $inject notacija osigurava da injekcija radi nakon minimizacije.
  • ๐Ÿ“Š Napomena o verziji: Podrลกka za AngularJS zavrลกila je u sijeฤnju 2022.; Angular sada ubrizgava elemente putem inject().

AngularJS injektiranje ovisnosti koje prosljeฤ‘uje uslugu u kontroler putem injektora

ล 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.

Klasa modela koja ovisi o bazi podataka, s ubrizganom uslugom za dohvaฤ‡anje podataka

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;

  1. 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.
  2. Ako AngularJS otkrije da $http usluga nije instancirana, AngularJS koristi 'tvorniฤku' funkciju za konstruiranje $http objekta.
  3. 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

  1. Jedan je kroz "komponentu vrijednosti"
  2. 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

  1. sampleApp.value("TutorialID", 5);

    Funkcija value AngularJS modula koristi se za stvaranje para kljuฤ-vrijednost pod nazivom โ€žTutorialIDโ€œ i vrijednosti โ€ž5โ€œ.

  2. sampleApp.controller('AngularJSController', function ($scope,TutorialID)

    Varijabla TutorialID sada postaje dostupna kontroleru kao funkcijski parametar.

  3.  $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.

  4. {{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

Izlaz preglednika za primjer komponente vrijednosti ispisujuฤ‡i ubrizgani TutorialID od 5

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

  1.  mainApp.service('AdditionService', function()

    Ovdje stvaramo novu uslugu pod nazivom 'AdditionService' koristeฤ‡i parametar service naลกeg glavnog AngularJS modula.

  2.  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.

  3.  return a+b;

    Ovdje definiramo tijelo naลกe funkcije ADDITION koja jednostavno zbraja parametre i vraฤ‡a zbrajanu vrijednost.

  4.  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'.

  5.  $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.

Pitanja i odgovori

service instancira vaลก konstruktor jednom s new. factory pokreฤ‡e vaลกu funkciju i ubrizgava sve ลกto vrati, tako da i primitivi rade.

Konstanta doseลพe konfiguracijske blokove i opire se dekoraterima. Vrijednost se registrira nakon pruลพatelja, tako da je konfiguracijski blokovi ne mogu vidjeti.

Jedan injektor po aplikaciji razrjeลกava imena, vraฤ‡a instance putem get-a i pokreฤ‡e funkcije s njihovim ovisnostima putem invoke-a.

Minifikatori preimenuju parametre u pojedinaฤna slova, tako da injektor traลพi pruลพatelja pod nazivom a. Eksplicitna anotacija ฤuva stvarna imena.

Registrirajte pruลพatelja usluga, navedite njegovog modul u polju ovisnosti i provjeri pravopis. Neanotirani minificirani kod takoฤ‘er ga podiลพe.

@Injectable provideri plus parametri konstruktora ili ubrizgati() funkcija unutar inicijalizatora polja. Hijerarhijski injektor rjeลกava svaki token.

Alati za strojno uฤenje tracsvako ubrizgano ime preko kontroleri i usluge, rangiranje i oznaฤavanje riziฤnih pruลพatelja usluga. Inลพenjeri provjeravaju rezultate.

GitHub kopilot emitira inline array i $inject anotacije na zahtjev, a agentic pokreฤ‡e sweep cijele mape. Revprikaz generiranih napomena.

Saลพmite ovu objavu uz: