Komponenty pro vkládání závislostí v AngularJS

⚡ Chytré shrnutí

V AngularJS předává komponentám objekty, na které se spoléhají, místo aby je samy vytvářely, takže kontrolery za běhu přijímají z frameworkového injectoru služby, jako je $http.

  • 🔘 Definice: Inverze řízení umožňuje externímu injektoru dodat každou závislost, kterou komponenta potřebuje.
  • ☑️ Recepty: objekty s možností injekčního registru hodnoty, továrny, služby, poskytovatele a konstanty.
  • (Tj. Hodnotová složka: Pár klíč-hodnota se dostává do kontroleru jako prostý parametr funkce.
  • 🧪 Služba: Objekt singleton zpřístupňuje opakovaně použitelné funkce, které kontrolery vkládají podle názvu.
  • 🛠️ Anotace: Inline array neboli notace $inject zajišťují funkčnost injektování i po minifikaci.
  • 📊 Poznámka k verzi: Podpora AngularJS skončila v lednu 2022; Angular nyní vkládá prvky pomocí inject().

Injektáž závislostí v AngularJS s předáváním služby do kontroleru prostřednictvím injektoru

Co je Dependency Injection v AngularJS?

Vstřikování závislosti v AngularJS je softwarový návrhový vzor, ​​který implementuje inverzi řízení pro řešení závislostí. Rozhoduje, jak si komponenty udrží své závislosti. Může být použit při definování komponent nebo poskytování run a konfiguračních bloků modulu. Umožňuje vám zajistit, aby součásti byly opakovaně použitelné, testovatelné a udržovatelné.

Inverze ovládání: Znamená to, že objekty nevytvářejí jiné objekty, na kterých se spoléhají při své práci. Místo toho získávají tyto objekty z vnějšího zdroje. To tvoří základ AngularJS Dependency Injection, kde pokud je jeden objekt závislý na druhém; primární objekt nepřebírá odpovědnost za vytvoření závislého objektu a následné použití jeho metod. Místo toho externí zdroj (což je v AngularJS samotný rámec AngularJS) vytvoří závislý objekt a předá jej zdrojovému objektu pro další použití.

⚠️ Poznámka k verzi: Podpora AngularJS skončila v lednu 2022, bez bezpečnostních záplat. Moderní Angular injectuje prostřednictvím providerů @Injectable a vstřiknout()Níže uvedený kód zůstává historický.

Nejprve si tedy ujasněme, co je to závislost.

Modelová třída závislá na databázi s vloženou službou pro načtení dat

Výše uvedený diagram ukazuje jednoduchý příklad injekce závislosti AngularJS každodenního rituálu v databázovém programování.

  • Pole „Model“ zobrazuje „třídu modelu“, která se obvykle vytváří pro interakci s databází. Nyní je tedy databáze závislá na fungování „třídy modelu“.
  • Vložením závislostí vytvoříme službu, která získá všechny informace z databáze a dostane se do třídy modelu.

Ve zbytku tohoto tutoriálu se více podíváme na vkládání závislostí a na to, jak se to dělá v AngularJS.

Kterou komponentu lze v AngularJS vložit jako závislost?

V AngularJS se závislosti vkládají pomocí „vkládatelné tovární metody“ nebo „konstrukční funkce“.

Tyto komponenty mohou být vloženy s komponentami „service“ a „value“ jako závislosti. Viděli jsme to v dřívějším tématu se službou $http.

AngularJS modul registruje injekční objekty pomocí pěti receptur.

Recept Co registruje
hodnota Připravený objekt, neviditelný pro konfigurační bloky
továrna Funkce, jejíž návratová hodnota je vložena
servis Konstruktor vytvořený jednou s new
Poskytovatel Konfigurovatelný recept zpřístupňující $get
konstantní Pevná hodnota čitelná v konfiguračních blocích

Již jsme viděli, že službu $http lze použít v rámci AngularJS k získání dat z a MySQL nebo MS SQL Databáze serveru přes a PHP webová aplikace.

Služba $http je normálně definována z řadiče následujícím způsobem.

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

Nyní, když je v ovladači definována služba $http, jak je uvedeno výše. Znamená to, že řadič je nyní závislý na službě $http.

Takže když se výše uvedený kód spustí, AngularJS provede následující kroky;

  1. Zkontrolujte, zda byla vytvořena instance „služby $http“. Vzhledem k tomu, že náš „řadič“ nyní závisí na službě „$http“, objekt této služby musí být našemu správci zpřístupněn.
  2. Pokud AngularJS zjistí, že služba $http není vytvořena, použije AngularJS funkci 'factory' k vytvoření objektu $http.
  3. Injektor v AngularJS poté poskytne instanci služby $http našemu kontroleru k dalšímu zpracování.

Anotační formuláře: Implicitní anotace čte názvy parametrů, takže minifikace je přeruší. Inline array notace a $inject ji přežijí; ng-strict-di v ng-app odmítá implicitní anotaci.

Nyní, když je závislost vložena do našeho ovladače, můžeme nyní vyvolat potřebné funkce v rámci služby $http pro další zpracování.

Příklad Dependency Injection

V tomto příkladu se naučíme, jak používat v AngularJS vkládání závislostí.

Dependency injection lze implementovat 2 způsoby

  1. Jedním z nich je „hodnotová složka“
  2. Další je prostřednictvím „služby“

Podívejme se na implementaci obou způsobů podrobněji.

1) Hodnotová složka

Tato koncepce je založena na vytvoření jednoduchého JavaScénář objektu a jeho předání kontroleru k dalšímu zpracování.

To se provádí pomocí níže uvedených dvou kroků

Krok 1) Vytvořit JavaSkriptujte objekt pomocí komponenty value a připojte ho k hlavnímu modulu AngularJS.

Hodnotová složka nabývá dvou parametrů; jeden je klíč a druhý je hodnota JavaObjekt skriptu, který je vytvořen.

Krok 2) Vstoupit JavaObjekt skriptu z Kontroler AngularJS

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

Výše uvedený kód provádí následující kroky

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

    Funkce value modulu AngularJS se používá k vytvoření páru klíč-hodnota s názvem „TutorialID“ a hodnoty „5“.

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

    Proměnná TutorialID se nyní stane přístupnou řídicímu systému jako parametr funkce.

  3.  $scope.ID =TutorialID;

    Hodnota TutorialID, která je 5, je nyní přiřazena jiné proměnné s názvem ID v $scope objekt. To se provádí proto, aby bylo možné předat hodnotu 5 z kontroleru do zobrazení.

  4. {{ID}}

    Parametr ID se zobrazuje v pohledu jako výraz. Takže výstup '5' se zobrazí na stránce.

Po provedení výše uvedeného kódu se výstup zobrazí jako níže

Výstup prohlížeče pro příklad komponenty value s vloženým TutorialID s hodnotou 5

2) Služba

Služba je definována jako singleton JavaObjekt skriptu sestávající ze sady funkcí, které chcete vystavit a vložit do vašeho ovladače.

Například „$http“ je služba v AngularJS, která po vložení do vašich kontrolerů poskytuje potřebné funkce pro

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

Tyto funkce lze následně vyvolat z vašeho ovladače.

Podívejme se na jednoduchý příklad, jak si můžete vytvořit vlastní službu. Vytvoříme jednoduchou sčítací službu, která sečte dvě čísla.

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

Ve výše uvedeném příkladu jsou provedeny následující kroky

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

    Zde vytváříme novou službu s názvem „AdditionService“ pomocí parametru service našeho hlavního modulu AngularJS.

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

    Zde vytváříme novou funkci s názvem ADDITION v rámci naší služby. To znamená, že když AngularJS vytvoří instanci naší služby AdditionService uvnitř našeho kontroleru, budeme moci přistupovat k funkci 'ADDITION'. V této definici funkce říkáme, že tato funkce přijímá dva parametry, a a b.

  3.  return a+b;

    Zde definujeme tělo naší funkce ADDITION, která jednoduše sečte parametry a vrátí přidanou hodnotu.

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

    Toto je hlavní krok, který zahrnuje vkládání závislostí. V naší definici kontroleru nyní odkazujeme na naši službu „AdditionService“. Když AngularJS tuto informaci vidí, vytvoří instanci objektu typu „AdditionService“.

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

    Nyní přistupujeme k funkci 'ADDITION', která je definována v naší službě, a přiřazujeme ji objektu $scope kontroleru.

Toto je jednoduchý příklad toho, jak můžeme definovat naši službu a vložit funkčnost této služby do našeho kontroléru.

Nejčastější dotazy

Služba service jednou vytvoří instanci vašeho konstruktoru s funkcí new. Funkce factory spustí vaši funkci a vloží vše, co vrátí, takže primitiva fungují také.

Konstanta se dostane do konfiguračních bloků a odolává dekorátorům. Hodnota se registruje až po providerech, takže ji konfigurační bloky nevidí.

Jeden injektor na aplikaci rozpoznává názvy, vrací instance pomocí metody get a spouští funkce s jejich závislostmi pomocí metody invoke.

Minifiery přejmenují parametry na jednotlivá písmena, takže injektor hledá poskytovatele s názvem a. Explicitní anotace zachovává skutečná jména.

Zaregistrujte poskytovatele a uveďte jeho modul v poli závislostí a zkontrolujte pravopis. Neanotovaný minifikovaný kód jej také vyvolá.

@Injectable providers plus parametry konstruktoru nebo vstřiknout() funkce uvnitř inicializátorů polí. Hierarchický injektor vyhodnocuje každý token.

Nástroje strojového učení trackaždé vložené jméno napříč regulátory a služby, propojení pozic a označení rizikových poskytovatelů. Inženýři ověřují výsledky.

GitHub Copilot Na vyžádání generuje anotace inline array a $inject a agentic prohledává celé složky. Revzobrazit vygenerované anotace.

Shrňte tento příspěvek takto: