AngularJS-riippuvuuksien injektointikomponentit

โšก ร„lykรคs yhteenveto

AngularJS:n riippuvuusinjektio antaa komponenteille objektit, joihin ne luottavat, sen sijaan, ettรค ne voisivat itse rakentaa kyseiset objektit. Nรคin ohjaimet saavat palveluita, kuten $http, kehysinjektorilta suorituksen aikana.

  • ๐Ÿ”˜ Mรครคritelmรค: Ohjauksen kรครคnteinen kรคyttรถ antaa ulkoisen injektorin toimittaa kaikki komponentin tarvitsemat riippuvuudet.
  • โ˜‘๏ธ reseptit: arvo-, tehdas-, palvelu-, toimittaja- ja vakiorekisteriin injektoitavat objektit.
  • โœ… Arvokomponentti: Avain-arvo-pari saapuu ohjaimeen pelkkinรค funktioparametreina.
  • ๐Ÿงช Palvelun: Singleton-objekti paljastaa uudelleenkรคytettรคviรค funktioita, joita ohjaimet lisรครคvรคt nimeltรค.
  • ๐Ÿ› ๏ธ Huomautukset: Inline-taulukko tai $inject-merkintรค pitรครค injektoinnin toiminnassa minifioinnin jรคlkeen.
  • ๐Ÿ“Š Versiohuomautus: AngularJS-tuki pรครคttyi tammikuussa 2022; Angular injektoi nyt inject()-funktion kautta.

AngularJS-riippuvuusinjektio, joka vรคlittรครค palvelun ohjaimeen injektorin kautta

Mikรค on riippuvuusinjektio AngularJS:ssรค?

Riippuvuusinjektio AngularJS:ssรค on ohjelmistosuunnittelumalli, joka toteuttaa ohjauksen kรครคnteisen riippuvuuden ratkaisemiseksi. Se pรครคttรครค, kuinka komponentit sรคilyttรคvรคt riippuvuutensa. Sitรค voidaan kรคyttรครค komponenttien mรครคrittelyssรค tai moduulin ajo- ja konfigurointilohkojen tarjoamisessa. Sen avulla voit tehdรค komponenteista uudelleenkรคytettรคviรค, testattavia ja yllรคpidettรคviรค.

Ohjauksen kรครคnnรถs: Se tarkoittaa, ettรค objektit eivรคt luo muita objekteja, joihin ne luottavat tyรถssรครคn. Sen sijaan he saavat nรคmรค esineet ulkopuolisesta lรคhteestรค. Tรคmรค muodostaa perustan AngularJS-riippuvuusinjektiolle, jossa jos yksi objekti on riippuvainen toisesta; ensisijainen objekti ei ota vastuuta riippuvan objektin luomisesta ja sen menetelmien kรคyttรคmisestรค. Sen sijaan ulkoinen lรคhde (joka AngularJS:ssรค on itse AngularJS-kehys) luo riippuvaisen objektin ja antaa sen lรคhdeobjektille myรถhempรครค kรคyttรถรค varten.

โš ๏ธ Versiohuomautus: AngularJS-tuki pรครคttyi tammikuussa 2022ilman tietoturvapรคivityksiรค. Modern Angular injektoi @Injectable-palveluntarjoajien kautta ja pistรครค()Alla oleva koodi pysyy historiallisena.

Ymmรคrrรคmme siis ensin mitรค riippuvuus on.

Tietokannasta riippuva malliluokka, johon on injektoitu palvelu tiedon hakemiseksi

Yllรค oleva kaavio nรคyttรครค yksinkertaisen AngularJS-riippuvuuden lisรคyksen esimerkin jokapรคivรคisestรค rituaalista tietokantaohjelmoinnissa.

  • "Malli"-ruutu kuvaa "Malliluokkaa", joka yleensรค luodaan vuorovaikutukseen tietokannan kanssa. Joten nyt tietokanta on "malliluokan" toiminnan riippuvuus.
  • Riippuvuusinjektion avulla luomme palvelun, joka nappaa kaikki tiedot tietokannasta ja pรครคstรค malliluokkaan.

Tรคmรคn tutoriaalin loppuosassa tarkastelemme lisรครค riippuvuuksien injektointia ja sitรค, miten se toteutetaan angularjs.

Mikรค komponentti voidaan injektoida riippuvuutena AngularJS:ssรค?

AngularJS:ssรค riippuvuudet injektoidaan kรคyttรคmรคllรค "injectable factory method" tai "constructor function".

Nรคihin komponentteihin voidaan lisรคtรค "palvelu"- ja "arvo"-komponentteja riippuvuuksina. Olemme nรคhneet tรคmรคn aikaisemmassa aiheessa $http-palvelun kanssa.

AngularJS moduuli rekisterรถi injektoitavat esineet viiden reseptin avulla.

Resepti Mitรค se rekisterรถi
arvo Valmis objekti, nรคkymรคtรถn konfigurointilohkoille
tehdas Funktio, jonka paluuarvo injektoidaan
palvelu Konstruktori luotiin kerran uudella instanssilla
toimittaja Muokattava resepti, joka paljastaa $get-funktion
vakio Kiinteรค arvo, joka on luettavissa mรครคrityslohkoista

Olemme jo nรคhneet, ettรค $http-palvelua voidaan kรคyttรครค AngularJS:ssรค tietojen saamiseksi a MySQL tai MS SQL Palvelintietokanta a PHP verkkosovellus.

$http-palvelu mรครคritellรครคn normaalisti ohjaimen sisรคltรค seuraavalla tavalla.

sampleApp.controller ('AngularJSController', function ($scope, $http)

Nyt kun $http-palvelu on mรครคritelty ohjaimessa yllรค olevan kuvan mukaisesti. Se tarkoittaa, ettรค ohjain on nyt riippuvainen $http-palvelusta.

Joten kun yllรค oleva koodi suoritetaan, AngularJS suorittaa seuraavat vaiheet;

  1. Tarkista, onko "$http-palvelu" instantoitu. Koska "ohjain" on nyt riippuvainen "$http-palvelusta", tรคmรคn palvelun kohde on asetettava ohjaimemme saataville.
  2. Jos AngularJS saa selville, ettรค $http-palvelua ei ole instantoitu, AngularJS kรคyttรครค 'factory'-funktiota $http-objektin rakentamiseen.
  3. AngularJS:n injektori tarjoaa sitten $http-palvelun instanssin ohjaimellemme jatkokรคsittelyรค varten.

Merkintรคlomakkeet: Implisiittinen annotaatio lukee parametrien nimet, joten minimointi rikkoo sen. Sekรค inline-taulukon merkintรคtapa ettรค $inject sรคilyvรคt siinรค; ng-strict-di ng-app-sovelluksessa hylkรครค implisiittisen annotoinnin.

Nyt kun riippuvuus on lisรคtty ohjaimeen, voimme nyt kutsua tarvittavat toiminnot $http-palvelussa jatkokรคsittelyรค varten.

Esimerkki riippuvuusruiskeesta

Tรคssรค esimerkissรค opimme kรคyttรคmรครคn riippuvuusinjektiota AngularJS:ssรค.

Riippuvuusinjektio voidaan toteuttaa kahdella tavalla

  1. Yksi on "arvokomponentin" kautta
  2. Toinen on "palvelun" kautta

Katsotaanpa molempien tapojen toteutusta yksityiskohtaisemmin.

1) Arvokomponentti

Tรคmรค konsepti perustuu yksinkertaisen luomiseen JavaKรคsikirjoitus objekti ja vรคlittรครค sen ohjaimelle jatkokรคsittelyรค varten.

Tรคmรค toteutetaan kรคyttรคmรคllรค alla olevia kahta vaihetta

Vaihe 1) Luo JavaScript-objekti kรคyttรคmรคllรค value-komponenttia ja liitรค se AngularJS-pรครคmoduuliisi.

Arvokomponentti saa kaksi parametria; toinen on avain ja toinen on funktion arvo. JavaLuotava skriptiobjekti.

Vaihe 2) Kirjaudu JavaKรคsikirjoitusobjekti kohteesta AngularJS-ohjain

<! 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>

Yllรค oleva koodi suorittaa alla olevat vaiheet

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

    AngularJS-moduulin value-funktiota kรคytetรครคn avain-arvo-parin nimeltรค โ€TutorialIDโ€ ja arvon โ€5โ€ luomiseen.

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

    TutorialID-muuttuja on nyt ohjaimen kรคytettรคvissรค toimintoparametrina.

  3.  $scope.ID =TutorialID;

    TutorialID:n arvo, joka on 5, annetaan nyt toiselle muuttujalle nimeltรค ID kohdassa $laajuus objekti. Tรคmรค tehdรครคn, jotta arvo 5 voidaan vรคlittรครค ohjaimelta nรคkymรครคn.

  4. {{ID}}

    ID-parametri nรคytetรครคn nรคkymรคssรค lausekkeena. Joten tulos '5' nรคkyy sivulla.

Kun yllรค oleva koodi suoritetaan, tulos nรคytetรครคn alla

Arvokomponenttiesimerkin selaintuloste, joka tulostaa injektoidun TutorialID:n arvosta 5

2) Palvelu

Palvelu mรครคritellรครคn yksittรคiseksi JavaKomentosarjaobjekti, joka koostuu joukosta toimintoja, jotka haluat paljastaa ja lisรคtรค ohjaimeen.

Esimerkiksi โ€$httpโ€ on AngularJS:n palvelu, joka ohjaimiin injektoituna tarjoaa tarvittavat toiminnot

( get() , query() , save() , remove(), delete() ).

Nรคmรค toiminnot voidaan sitten kutsua ohjaimesta vastaavasti.

Katsotaanpa yksinkertaista esimerkkiรค siitรค, kuinka voit luoda oman palvelun. Aiomme luoda yksinkertaisen summauspalvelun, joka lisรครค kaksi numeroa.

<! 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>

Yllรค olevassa esimerkissรค suoritetaan seuraavat vaiheet

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

    Tรคssรค luomme uuden palvelun nimeltรค 'AdditionService' kรคyttรคmรคllรค pรครคasiallisen AngularJS-moduulimme palveluparametria.

  2.  this.ADDITION = function(a,b)

    Tรคssรค luomme uuden funktion nimeltรค ADDITION palveluumme. Tรคmรค tarkoittaa, ettรค kun AngularJS luo AdditionService-instanssin ohjaimemme sisรคllรค, voimme kรคyttรครค 'ADDITION'-funktiota. Tรคssรค funktion mรครคritelmรคssรค sanomme, ettรค tรคmรค funktio hyvรคksyy kaksi parametria, a ja b.

  3.  return a+b;

    Tรคssรค mรครคrittelemme yhteenlaskufunktion rungon, joka yksinkertaisesti laskee parametrit yhteen ja palauttaa lisรคtyn arvon.

  4.  mainApp.controller('DemoController', function($scope, AdditionService)

    Tรคmรค on pรครคvaihe, johon liittyy riippuvuuksien injektointi. Ohjainmรครคritelmรคssรคmme viittaamme nyt 'AdditionService'-palveluumme. Kun AngularJS nรคkee tรคmรคn, se luo 'AdditionService'-tyyppisen objektin instanssin.

  5.  $scope.result = AdditionService.ADDITION(5,6);

    Kรคytรคmme nyt palvelussamme mรครคriteltyรค funktiota 'ADDITION' ja mรครคritรคmme sen ohjaimen $scope-objektille.

Tรคmรค on siis yksinkertainen esimerkki siitรค, kuinka voimme mรครคritellรค palvelumme ja lisรคtรค palvelun toiminnallisuuden ohjaimemme sisรครคn.

UKK

service luo konstruktoristasi kerran instanssin uudella funktiolla. factory suorittaa funktiosi ja injektoi sen palauttaman tuloksen, joten myรถs primitiivit toimivat.

vakio saavuttaa konfigurointilohkot ja vastustaa koristeluja. Arvo rekisterรถidรครคn tarjoajien jรคlkeen, joten konfigurointilohkot eivรคt voi nรคhdรค sitรค.

Yksi injektori sovellusta kohden selvittรครค nimet, palauttaa instanssit get-funktion kautta ja suorittaa funktioita riippuvuuksineen invoke-funktion kautta.

Pienentรคjรคt nimeรคvรคt parametrit uudelleen yksittรคisiksi kirjaimiksi, joten injektori etsii a-nimistรค tarjoajaa. Eksplisiittinen annotaatio sรคilyttรครค oikeat nimet.

Rekisterรถi palveluntarjoaja, listaa sen moduuli riippuvuustaulukossa ja tarkista oikeinkirjoitus. Myรถs kommentoimaton minifioitu koodi aiheuttaa sen.

@Injectable-palveluntarjoajat ja konstruktoriparametrit tai pistรครค() funktio kenttien alustajien sisรคllรค. Hierarkkinen injektori ratkaisee jokaisen tunnuksen.

Koneoppimistyรถkalut tracjokainen ruiskutettu nimi ohjaimet ja palvelut, luokittelevat kytkennรคt ja merkitsevรคt riskialttiita palveluntarjoajia. Insinรถรถrit tarkistavat tulokset.

GitHub Copilot lรคhettรครค pyynnรถstรค rivikohtaisen taulukon ja $inject-merkinnรคt, ja agentic suorittaa koko kansioiden pyyhkรคisyn. RevIEW:n luomat merkinnรคt.

Tiivistรค tรคmรค viesti seuraavasti: