AngularJS Dependency Injection: Které komponenty byly injektovány

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

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

Dependency Injection v AngularJS

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 zbývající části tohoto tutoriálu se podíváme více na vkládání závislostí a na to, jak je toho dosaženo v AngularJS.

Která komponenta může být injektována jako závislost v AngularJS?

V Angular.JS jsou závislosti injektovány pomocí „injektovatelné tovární metody“ nebo „funkce konstruktoru“.

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.

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 rámci Angular.JS pak poskytuje instanci služby $http našemu kontroléru k dalšímu zpracování.

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

Tento koncept je založen na vytvoření jednoduchého JavaScénář vznést námitku a předat ji správci 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 jej k hlavnímu modulu AngularJS.JS.

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

Krok 2) Vstoupit JavaObjekt skriptu z Ovladač Angular.JS

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

Ve výše uvedeném příkladu kódu se provádějí níže uvedené hlavní kroky

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

Funkce value modulu Angular.JS JS se používá k vytvoření páru klíč-hodnota nazvaného „TutorialID“ a hodnoty „5“.

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

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

  1.  $scope.ID =TutorialID;

Hodnota TutorialID, která je 5, je nyní přiřazena k jiné proměnné s názvem ID v objektu $scope. To se provádí tak, aby hodnota 5 mohla být předána z ovladače do pohledu.

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

Hodnotová složka v Dependency Injection

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 Angular.JS, která po vložení do vašich ovladačů poskytuje potřebné funkce

( 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 služby našeho hlavního modulu AngularJS JS.

  1.  this.Addition = function(a,b)

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

  1.  return a+b;

Zde definujeme tělo naší funkce Addition, která jednoduše přidá parametry a vrátí přidanou hodnotu.

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

Toto je hlavní krok, který zahrnuje injekci závislosti. V naší definici správce nyní odkazujeme na naši službu „AdditionService“. Když AngularJS uvidí toto, vytvoří instanci objektu typu 'AdditionService.'

  1.  $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 k objektu $scope ovladače.

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.

Shrnutí

  • Dependency Injection, jak název napovídá, je proces vkládání závislých funkcí do modulů za běhu.
  • Použití vkládání závislostí pomáhá získat více znovu použitelný kód. Pokud jste měli společnou funkcionalitu, která se používá ve více aplikačních modulech, nejlepším způsobem je definovat centrální službu s touto funkčností a poté tuto službu vložit jako závislost do vašich aplikačních modulů.
  • Hodnotový objekt AngularJS lze použít k jednoduché injekci JavaSkriptujte objekty ve vašem ovladači pomocí $inject in AngularJS.
  • Servisní modul lze použít k definování vašich vlastních služeb, které lze znovu použít ve více modulech AngularJS.