Inhaltsverzeichnis
总结
Heim Web-Frontend js-Tutorial Eine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular

Eine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular

Dec 02, 2022 pm 09:14 PM
angular angular.js 依赖注入

In diesem Artikel erfahren Sie mehr über die Abhängigkeitsinjektion, stellen die Probleme vor, die die Abhängigkeitsinjektion löst, und ihre native Schreibmethode und sprechen über das Abhängigkeitsinjektions-Framework von Angular. Ich hoffe, dass es für alle hilfreich ist!

Eine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular

In letzter Zeit bin ich in Angular-Projekten oft auf die Keyword-Abhängigkeitsinjektion gestoßen, aber ich verstehe immer noch nicht, wie sie implementiert wird. Auf der offiziellen Website von Angular wird nur über ihre Verwendung gesprochen und die detaillierten Prinzipien werden nicht erläutert Lassen Sie uns also anhand der nativen Schreibmethode erklären, welche Probleme mit der Abhängigkeitsinjektion gelöst werden und wie sie mit js ausgedrückt werden sollte. [Verwandte Tutorial-Empfehlungen: „Angular-Tutorial“]

Was ist Abhängigkeitsinjektion, auch als DI bezeichnet, ist ein Entwurfsprinzip in der objektorientierten Programmierung, das verwendet wird, um die Kopplung zwischen Codes zu reduzieren.

Schauen wir uns zuerst einen Code an

rrree

Angenommen, wir verwenden eine Videoklasse, die über eine Methode getScreenshot verfügt, um Screenshots zu erhalten. Beim Instanziieren der Videoklasse müssen wir einen Parameter wie eine Video-URL übergeben. Jetzt gibt es eine Notizklasse, die die Screenshot-Methode unter der Videoklasse aufrufen muss. Dann können wir sagen, dass die Notizklasse von der Videoklasse abhängt. Innerhalb der Notizklasse müssen wir also die Videoklasse instanziieren, damit wir das Instanzobjekt der Videoklasse in der Notizklasse abrufen und darin die Screenshot-Methode aufrufen können.

Die Kopplung des oben genannten Codes ist zu hoch und wird nicht empfohlen. Wenn beispielsweise die Videoadresse von Video geändert wird, muss die eingehende Video-URL geändert werden. Dies setzt voraus, dass weitere Klassen davon abhängen on Bei Videos muss, sobald Änderungen vorgenommen wurden, alles entsprechend geändert werden, was sehr unpraktisch ist.

Als nächstes verwenden wir die Abhängigkeitsinjektion, um das obige Problem zu lösen:

class Video{
    constructor(url){}
}

class Note{
    video: Video
    constructor(){
        this.video = new Video("https://aaaaa.mp4")
    }
    
    getScreenshot(){
        this.video.getScreenshot()
    }
}

const note = new Note()
note.getScreenshot()
Nach dem Login kopieren

Wir instanziieren die Videoklasse außerhalb der Klasse und übergeben die Instanz durch Parameterübergabe an die Notizklasse. Auf diese Weise kann auch der Kopplungsgrad erfolgreich gelöst werden Da es sich um ein großes Problem handelt, nennen wir diese Art, Instanzen durch Parameter zu übergeben: Injektion.

Vorteile

Durch die Abhängigkeitsinjektion wird die Kopplung zwischen Codes verringert und die Wartbarkeit des Codes erhöht. Codeänderungen in der Videoklasse haben keine Auswirkungen auf die Notizklasse.

Angulars DI-Framework

Im obigen Implementierungsprozess gibt es noch eine Sache, die nicht besonders ideal ist: Wir müssen die Videoklasse außerhalb der Klasse instanziieren. Obwohl dies der einzige Ort ist, hoffen wir immer noch, dass dies der Fall ist Videoklasse Unabhängig davon, wie Sie sie intern ändern, hat dies keine Auswirkungen auf den externen Code.

Im von Angular bereitgestellten DI-Framework müssen wir die Videoklasse nicht selbst instanziieren. Für Entwickler müssen nur sehr einfache Abhängigkeitsinjektionsfunktionen verwendet werden.

Es gibt vier Kernkonzepte in Angulars DI:

Abhängigkeit: das Instanzobjekt, von dem die Komponente abhängt, das Dienstinstanzobjekt
  • Token: Ruft die Identität des Dienstinstanzobjekts ab, Angular verwaltet viele Instanzen Objekte Wenn wir es erhalten müssen, müssen wir es durch Identifizierung erhalten
  • Injektor: Injektor, verantwortlich für die Erstellung und Verwaltung von Instanzobjekten von Serviceklassen, das Einfügen von Serviceinstanzobjekten in Komponenten und deren Weitergabe an jede Komponente Parameter
  • Procider: Objekt, das zum Konfigurieren des Injektors verwendet wird, die Dienstklasse angibt, um das Dienstinstanzobjekt zu erstellen und die Kennung des Instanzobjekts abzurufen
  • Injektor-Injektor
Wir erstellen zunächst einen Injektor über die grundlegende Syntax Bereitgestellt von Angular

ReflectiveInjector wird verwendet, um ein Array zu erstellen Injektor. 2. Holen Sie sich das Serviceklassen-Instanzobjekt im Injektor

class Note{
    video: Video
    constructor(video: Video){
        this.video = Video;
    }
}

const video = new Video("https://aaaaa.mp4")
const note = new Note(video)
Nach dem Login kopieren

Unter dem Injektor gibt es eine Get-Methode, mit der der Bezeichner übergeben und das Instanzobjekt abgerufen wird. Der Standardbezeichner ist der Name der Serviceklasse Video

damit wir das Instanzobjekt von Video erhalten können. Das von Angular bereitgestellte DI-Framework macht es für uns überflüssig, eine Klasse manuell zu instanziieren.

2. Das Instanzobjekt des Dienstes befindet sich im Singleton-Modus. Wenn der Injektor die Dienstinstanz erstellt, bereut er das Zwischenspeichern. Das heißt, egal wie oft das Instanzobjekt über das Framework abgerufen wird Gibt das gleiche Instanzobjekt zurück

3. Wir können jedoch mehrere Injektoren erstellen, die von verschiedenen Injektoren zurückgegeben werden. Es gibt eine Methode zum Erstellen eines untergeordneten Injektors ist discoverAndCreateChild. Die Beziehung zwischen dem übergeordneten Injektor und dem untergeordneten Injektor ähnelt der Gültigkeitskette von js. Wenn der aktuelle Injektor nicht gefunden werden kann, wird er zum übergeordneten Injektor weitergeleitet. wie zum Beispiel:

const injector = ReflectiveInjector.resolveAndCreate([ Video ])
const injectorChild = injector.resolveAndCreateChild([])

const video1 = injector.get(Video)
const video2 = injectorChild.get(Video)

console.log(video1 === video1)//true
Nach dem Login kopieren

像上面这段代码,我们在创建子级注入器的时候,不传递参数,但是在子级注入器实例化的时候,由于自身不存在 Video 这个服务,它就会去父级查找,当然,就找到了父级的 Video 这个服务并且实例化,所以后面的两个实例化对象相等

总结

本文介绍了依赖注入解决的问题和它原生的写法是什么用的,并且介绍了Angular提供给我们的DI框架,用它提供给我们的简单api实现了实例化的过程,并且讲解了注入器,也是会分层级的,能提供给我们更好地一个项目设计方式。之后有机会再来讲解一下provider以及更多的扩展。

更多编程相关知识,请访问:编程视频!!

Das obige ist der detaillierte Inhalt vonEine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Angular Learning spricht über eigenständige Komponenten (Standalone Component) Angular Learning spricht über eigenständige Komponenten (Standalone Component) Dec 19, 2022 pm 07:24 PM

Dieser Artikel wird Sie dabei unterstützen, Angular weiter zu lernen und die eigenständige Komponente (Standalone Component) in Angular kurz zu verstehen. Ich hoffe, er wird Ihnen hilfreich sein!

So installieren Sie Angular unter Ubuntu 24.04 So installieren Sie Angular unter Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js ist eine frei zugängliche JavaScript-Plattform zum Erstellen dynamischer Anwendungen. Es ermöglicht Ihnen, verschiedene Aspekte Ihrer Anwendung schnell und klar auszudrücken, indem Sie die Syntax von HTML als Vorlagensprache erweitern. Angular.js bietet eine Reihe von Tools, die Sie beim Schreiben, Aktualisieren und Testen Ihres Codes unterstützen. Darüber hinaus bietet es viele Funktionen wie Routing und Formularverwaltung. In dieser Anleitung wird erläutert, wie Angular auf Ubuntu24 installiert wird. Zuerst müssen Sie Node.js installieren. Node.js ist eine JavaScript-Ausführungsumgebung, die auf der ChromeV8-Engine basiert und es Ihnen ermöglicht, JavaScript-Code auf der Serverseite auszuführen. In Ub sein

Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Oct 17, 2022 pm 08:04 PM

Wie verwende ich den Monaco-Editor in Angular? Der folgende Artikel dokumentiert die Verwendung des Monaco-Editors in Angular, der kürzlich in einem Unternehmen verwendet wurde. Ich hoffe, dass er für alle hilfreich sein wird!

Ein Artikel über serverseitiges Rendering (SSR) in Angular Ein Artikel über serverseitiges Rendering (SSR) in Angular Dec 27, 2022 pm 07:24 PM

Kennen Sie Angular Universal? Es kann dazu beitragen, dass die Website eine bessere SEO-Unterstützung bietet!

Wie man PHP und Angular für die Frontend-Entwicklung verwendet Wie man PHP und Angular für die Frontend-Entwicklung verwendet May 11, 2023 pm 04:04 PM

Mit der rasanten Entwicklung des Internets wird auch die Front-End-Entwicklungstechnologie ständig verbessert und iteriert. PHP und Angular sind zwei Technologien, die in der Frontend-Entwicklung weit verbreitet sind. PHP ist eine serverseitige Skriptsprache, die Aufgaben wie die Verarbeitung von Formularen, die Generierung dynamischer Seiten und die Verwaltung von Zugriffsberechtigungen übernehmen kann. Angular ist ein JavaScript-Framework, mit dem Single-Page-Anwendungen entwickelt und komponentenbasierte Webanwendungen erstellt werden können. In diesem Artikel erfahren Sie, wie Sie PHP und Angular für die Frontend-Entwicklung verwenden und wie Sie diese kombinieren

Winkelkomponenten und ihre Anzeigeeigenschaften: Nicht-Block-Standardwerte verstehen Winkelkomponenten und ihre Anzeigeeigenschaften: Nicht-Block-Standardwerte verstehen Mar 15, 2024 pm 04:51 PM

Das Standardanzeigeverhalten für Komponenten im Angular-Framework gilt nicht für Elemente auf Blockebene. Diese Designwahl fördert die Kapselung von Komponentenstilen und ermutigt Entwickler, bewusst zu definieren, wie jede Komponente angezeigt wird. Durch explizites Festlegen der CSS-Eigenschaft display kann die Anzeige von Angular-Komponenten vollständig gesteuert werden, um das gewünschte Layout und die gewünschte Reaktionsfähigkeit zu erreichen.

Lassen Sie uns darüber sprechen, wie Sie das Angular-DateTime-Picker-Format anpassen Lassen Sie uns darüber sprechen, wie Sie das Angular-DateTime-Picker-Format anpassen Sep 08, 2022 pm 08:29 PM

Wie kann ich das Angular-DateTime-Picker-Format anpassen? Im folgenden Artikel geht es um die Anpassung des Formats. Ich hoffe, er ist für alle hilfreich!

Eine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular Eine Schritt-für-Schritt-Anleitung zum Verständnis der Abhängigkeitsinjektion in Angular Dec 02, 2022 pm 09:14 PM

Dieser Artikel führt Sie durch die Abhängigkeitsinjektion, stellt die durch die Abhängigkeitsinjektion gelösten Probleme und ihre native Schreibmethode vor und spricht über das Abhängigkeitsinjektions-Framework von Angular. Ich hoffe, es wird Ihnen hilfreich sein!

See all articles