AngularJS Dependency Injection-Komponenten

โšก Intelligente Zusammenfassung

Die Dependency Injection in AngularJS รผbergibt den Komponenten die Objekte, auf die sie angewiesen sind, anstatt sie diese Objekte selbst erstellen zu lassen. So erhalten Controller Dienste wie $http zur Laufzeit vom Framework-Injector.

  • ๐Ÿ”˜ Definition: Die Inversion of Control ermรถglicht es einem externen Injektor, jede Abhรคngigkeit bereitzustellen, die eine Komponente benรถtigt.
  • โ˜‘๏ธ Rezepte: Wert-, Fabrik-, Service-, Provider- und Konstantenregister-injizierbare Objekte.
  • โœ… Wertkomponente: Ein Schlรผssel-Wert-Paar erreicht den Controller als einfacher Funktionsparameter.
  • ๐Ÿงช Service: Ein Singleton-Objekt stellt wiederverwendbare Funktionen bereit, die von Controllern รผber ihren Namen eingebunden werden.
  • ๏ธ Anmerkung: Die Verwendung von Inline-Arrays oder der $inject-Notation sorgt dafรผr, dass die Injektion auch nach der Minifizierung noch funktioniert.
  • ๐Ÿ“Š Versionshinweis: Die Unterstรผtzung fรผr AngularJS wurde im Januar 2022 eingestellt; Angular injiziert nun รผber inject().

AngularJS-Dependency-Injection: Ein Dienst wird mithilfe des Injectors an einen Controller รผbergeben.

Was ist Abhรคngigkeitsinjektion in AngularJS?

Abhรคngigkeitsspritze in AngularJS ist ein Software-Entwurfsmuster, das die Umkehrung der Kontrolle zum Auflรถsen von Abhรคngigkeiten implementiert. Es entscheidet, wie Komponenten ihre Abhรคngigkeiten halten. Es kann beim Definieren der Komponenten oder beim Bereitstellen von Ausfรผhrungs- und Konfigurationsblรถcken des Moduls verwendet werden. Es ermรถglicht Ihnen, die Komponenten wiederverwendbar, testbar und wartbar zu machen.

Umkehrung der Kontrolle: Das bedeutet, dass Objekte keine anderen Objekte erstellen, auf die sie bei der Ausfรผhrung ihrer Arbeit angewiesen sind. Stattdessen beziehen sie diese Objekte von einer externen Quelle. Dies bildet die Grundlage der AngularJS-Abhรคngigkeitsinjektion, bei der ein Objekt von einem anderen abhรคngig ist; Das primรคre Objekt รผbernimmt nicht die Verantwortung fรผr die Erstellung des abhรคngigen Objekts und die anschlieรŸende Verwendung seiner Methoden. Stattdessen erstellt eine externe Quelle (die in AngularJS das AngularJS-Framework selbst ist) das abhรคngige Objekt und รผbergibt es dem Quellobjekt zur weiteren Verwendung.

โš ๏ธ Versionshinweis: Die Unterstรผtzung fรผr AngularJS wurde im Januar 2022 eingestellt., ohne Sicherheitspatches. Modernes Angular injiziert รผber @Injectable-Provider und injizieren()Der unten stehende Code bleibt historisch.

Lassen Sie uns zunรคchst verstehen, was eine Abhรคngigkeit ist.

Die Modellklasse ist von einer Datenbank abhรคngig, wobei ein Dienst injiziert wird, um die Daten abzurufen.

Das obige Diagramm zeigt ein einfaches AngularJS-Abhรคngigkeitsinjektionsbeispiel fรผr ein alltรคgliches Ritual in der Datenbankprogrammierung.

  • Das Feld โ€žModellโ€œ stellt die โ€žModellklasseโ€œ dar, die normalerweise fรผr die Interaktion mit der Datenbank erstellt wird. Die Datenbank ist also eine Abhรคngigkeit fรผr die Funktion der โ€žModellklasseโ€œ.
  • Durch Abhรคngigkeitsinjektion erstellen wir einen Dienst, um alle Informationen aus der Datenbank abzurufen und in die Modellklasse zu gelangen.

Im weiteren Verlauf dieses Tutorials werden wir uns eingehender mit Dependency Injection und deren Umsetzung befassen. AngularJS.

Welche Komponente kann in AngularJS als Abhรคngigkeit injiziert werden?

In AngularJS werden Abhรคngigkeiten mithilfe einer โ€žinjizierbaren Factory-Methodeโ€œ oder einer โ€žKonstruktorfunktionโ€œ injiziert.

Diese Komponenten kรถnnen mit โ€žServiceโ€œ- und โ€žValueโ€œ-Komponenten als Abhรคngigkeiten injiziert werden. Wir haben dies in einem frรผheren Thema mit dem $http-Dienst gesehen.

Ein AngularJS Modulen Registriert injizierbare Objekte รผber fรผnf Rezepte.

Rezept Was es registriert
Wert Ein fertiges Objekt, das fรผr Konfigurationsblรถcke unsichtbar ist.
Fabrik Eine Funktion, deren Rรผckgabewert injiziert wird
service Ein Konstruktor, der einmal mit new instanziiert wurde
Versorger Ein konfigurierbares Rezept, das $get bereitstellt
konstante Ein fester Wert, der in Konfigurationsblรถcken lesbar ist

Wir haben bereits gesehen, dass der $http-Dienst in AngularJS verwendet werden kann, um Daten von a abzurufen MySQL oder MS SQL Serverdatenbank รผber a PHP Internetanwendung.

Der $http-Dienst wird normalerweise innerhalb des Controllers wie folgt definiert.

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

Nun ist der $http-Dienst wie oben gezeigt im Controller definiert. Dies bedeutet, dass der Controller jetzt vom $http-Dienst abhรคngig ist.

Wenn der obige Code ausgefรผhrt wird, fรผhrt AngularJS die folgenden Schritte aus:

  1. รœberprรผfen Sie, ob der โ€ž$http-Dienstโ€œ instanziiert wurde. Da unser โ€žControllerโ€œ nun auf den โ€ž$http-Dienstโ€œ angewiesen ist, muss unserem Controller ein Objekt dieses Dienstes zur Verfรผgung gestellt werden.
  2. Wenn AngularJS feststellt, dass der $http-Dienst nicht instanziiert ist, verwendet AngularJS die Funktion โ€žfactoryโ€œ, um ein $http-Objekt zu erstellen.
  3. Der Injector innerhalb von AngularJS stellt unserem Controller dann eine Instanz des $http-Dienstes zur weiteren Verarbeitung bereit.

Annotationsformulare: Implizite Annotation Das Lesen von Parameternamen wird durch die Minifizierung beeintrรคchtigt. Inline-Array-Notation und `$inject` funktionieren weiterhin; `ng-strict-di` auf `ng-app` lehnt implizite Annotationen ab.

Nachdem die Abhรคngigkeit nun in unseren Controller eingefรผgt wurde, kรถnnen wir nun die erforderlichen Funktionen innerhalb des $http-Dienstes zur weiteren Verarbeitung aufrufen.

Beispiel fรผr eine Abhรคngigkeitsinjektion

In diesem Beispiel lernen wir, wie man die Abhรคngigkeitsinjektion in AngularJS verwendet.

Die Abhรคngigkeitsinjektion kann auf zwei Arten implementiert werden

  1. Einer davon ist die โ€žWertkomponenteโ€œ.
  2. Eine andere Mรถglichkeit besteht in einem โ€žServiceโ€œ.

Schauen wir uns die Umsetzung beider Wege genauer an.

1) Wertkomponente

Dieses Konzept basiert auf der Erstellung eines einfachen JavaSkript das Objekt und รผbergibt es dem Controller zur weiteren Verarbeitung.

Dies wird mit den folgenden zwei Schritten implementiert

Schritt 1) Erstellen Sie JavaErstellen Sie ein Skriptobjekt mithilfe der Wertkomponente und fรผgen Sie es Ihrem Haupt-AngularJS-Modul hinzu.

Die Wertkomponente benรถtigt zwei Parameter; einen Schlรผssel und den Wert des JavaDas erstellte Skriptobjekt.

Schritt 2) Besuchen Sie das JavaScriptobjekt aus dem AngularJS-Controller

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

Der obige Code fรผhrt die folgenden Schritte aus

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

    Die Wertfunktion des AngularJS-Moduls wird verwendet, um ein Schlรผssel-Wert-Paar namens โ€žTutorialIDโ€œ und den Wert โ€ž5โ€œ zu erstellen.

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

    Die TutorialID-Variable ist nun fรผr den Controller als Funktionsparameter zugรคnglich.

  3.  $scope.ID =TutorialID;

    Der Wert von TutorialID, der 5 ist, wird nun einer anderen Variablen namens ID zugewiesen. $Bereich Objekt. Dies geschieht, damit der Wert 5 vom Controller an die Ansicht รผbergeben werden kann.

  4. {{ID}}

    Der ID-Parameter wird in der Ansicht als Ausdruck angezeigt. Daher wird auf der Seite die Ausgabe โ€ž5โ€œ angezeigt.

Wenn der obige Code ausgefรผhrt wird, wird die Ausgabe wie folgt angezeigt

Die Browserausgabe des Wertkomponentenbeispiels gibt die eingefรผgte TutorialID 5 aus.

2) Dienst

Der Dienst ist als Singleton definiert JavaSkriptobjekt, das aus einer Reihe von Funktionen besteht, die Sie in Ihrem Controller verfรผgbar machen und einfรผgen mรถchten.

Beispielsweise ist โ€ž$httpโ€œ ein Dienst in AngularJS, der, wenn er in Ihre Controller eingebunden wird, die notwendigen Funktionen bereitstellt.

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

Diese Funktionen kรถnnen dann entsprechend von Ihrem Controller aufgerufen werden.

Sehen wir uns ein einfaches Beispiel an, wie Sie Ihren eigenen Dienst erstellen kรถnnen. Wir werden einen einfachen Additionsdienst erstellen, der zwei Zahlen addiert.

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

Im obigen Beispiel werden die folgenden Schritte ausgefรผhrt

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

    Hier erstellen wir einen neuen Dienst namens 'AdditionService' mithilfe des Service-Parameters unseres Hauptmoduls AngularJS.

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

    Hier erstellen wir innerhalb unseres Services eine neue Funktion namens ADDITION. Das bedeutet, dass wir, sobald AngularJS unseren AdditionService in unserem Controller instanziiert, auf die Funktion โ€žADDITIONโ€œ zugreifen kรถnnen. In dieser Funktionsdefinition legen wir fest, dass die Funktion zwei Parameter, a und b, akzeptiert.

  3.  return a+b;

    Hier definieren wir den Rumpf unserer ADDITION-Funktion, die einfach die Parameter addiert und den addierten Wert zurรผckgibt.

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

    Dies ist der wichtigste Schritt, der die Abhรคngigkeitsinjektion beinhaltet. In unserer Controller-Definition verweisen wir nun auf unseren Dienst โ€žAdditionServiceโ€œ. Wenn AngularJS dies erkennt, instanziiert es ein Objekt vom Typ โ€žAdditionServiceโ€œ.

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

    Wir greifen nun auf die in unserem Service definierte Funktion 'ADDITION' zu und weisen sie dem $scope-Objekt des Controllers zu.

Dies ist also ein einfaches Beispiel dafรผr, wie wir unseren Dienst definieren und die Funktionalitรคt dieses Dienstes in unseren Controller integrieren kรถnnen.

Hรคufig gestellte Fragen

Der Service instanziiert Ihren Konstruktor einmalig mit `new`. Die Factory fรผhrt Ihre Funktion aus und injiziert deren Rรผckgabewert, sodass auch primitive Datentypen funktionieren.

Die Konstante erreicht Konfigurationsblรถcke und widersteht Dekoratoren. Der Wert wird nach den Anbietern registriert, sodass Konfigurationsblรถcke ihn nicht sehen kรถnnen.

Ein Injector pro Anwendung lรถst Namen auf, gibt Instanzen รผber get zurรผck und fรผhrt Funktionen mit ihren Abhรคngigkeiten รผber invoke aus.

Minifizierer benennen Parameter in einzelne Buchstaben um, sodass der Injector nach einem Provider mit dem Namen โ€žaโ€œ sucht. Explizite Annotationen erhalten die echten Namen.

Registrieren Sie den Anbieter, listen Sie seine Modulen im Abhรคngigkeitsarray und Rechtschreibung prรผfen. Nicht annotierter, minimierter Code lรถst das Problem ebenfalls aus.

@Injectable-Provider plus Konstruktorparameter oder die injizieren() Funktionen innerhalb von Feldinitialisierern. Ein hierarchischer Injektor lรถst jedes Token auf.

Werkzeuge fรผr maschinelles Lernen trace jeder eingefรผgte Name รผber Controller und Dienste, Rangkopplung und Kennzeichnung risikobehafteter Anbieter. Ingenieure รผberprรผfen die Ergebnisse.

GitHub-Copilot Gibt auf Anfrage Inline-Array- und $inject-Annotationen aus, und agentic durchsucht ganze Ordner. Review generierte Annotationen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: