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.
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.
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:
- ร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.
- Wenn AngularJS feststellt, dass der $http-Dienst nicht instanziiert ist, verwendet AngularJS die Funktion โfactoryโ, um ein $http-Objekt zu erstellen.
- 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
- Einer davon ist die โWertkomponenteโ.
- 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
-
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.
-
sampleApp.controller('AngularJSController', function ($scope,TutorialID)
Die TutorialID-Variable ist nun fรผr den Controller als Funktionsparameter zugรคnglich.
-
$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.
-
{{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
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
-
mainApp.service('AdditionService', function()
Hier erstellen wir einen neuen Dienst namens 'AdditionService' mithilfe des Service-Parameters unseres Hauptmoduls AngularJS.
-
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.
-
return a+b;Hier definieren wir den Rumpf unserer ADDITION-Funktion, die einfach die Parameter addiert und den addierten Wert zurรผckgibt.
-
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โ.
-
$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.


