suchen
HeimWeb-Frontendjs-TutorialWebkomponenten: Eine Einführung

In der modernen Webentwicklung liegen Frameworks voll im Trend. Fast alle modernen Frameworks verfügen über das Konzept von Komponenten. Die Idee hinter Komponenten besteht darin, Ihre Frontend-Logik in kleinere wiederverwendbare Teile zu zerlegen, die Sie seiten- oder projektübergreifend teilen können. Im Allgemeinen sind diese Komponenten nicht in anderen Frameworks wiederverwendbar und erfordern einen Build-Prozess, um sie in JavaScript zu kompilieren, das im Browser ausgeführt werden kann.

Was wäre, wenn ich Ihnen sagen würde, dass es eine Möglichkeit gibt, Komponenten mit Vanilla-JavaScript und allgemein verfügbaren Browser-APIs zu erstellen, die Sie über Frameworks hinweg teilen könnten? Mit Web Components ist dies nun Realität. Hier werfen wir einen kurzen Blick auf die verschiedenen Arten von Webkomponenten und einige der Möglichkeiten, die wir mit ihnen nutzen können.

Die Grundlagen von Webkomponenten

Webkomponenten werden mithilfe der Custom Element Registry definiert. Dies ist eine API, die die meisten modernen Browser bereitstellen. Um eine Webkomponente zu erstellen, definieren Sie sie einfach im Code und registrieren sie dann in der Custom Element Registry. Sobald sie registriert und mit den richtigen Namenskonventionen definiert ist, steht die Komponente zur Verwendung auf der Seite zur Verfügung.

customElements.define("my-component", MyComponentClass);

Arten von Webkomponenten

Webkomponenten können in zwei verschiedene Kategorien unterteilt werden. Dies sind Autonome Webkomponenten und Benutzerdefinierte integrierte Elemente.

Autonome Webkomponenten sind eine Erweiterung der generischen HTMLElement-Klasse. Diese Komponenten sind im Allgemeinen flexibler, da Sie im Wesentlichen Ihr eigenes HTML-Element erstellen und das gesamte Verhalten von Grund auf anpassen können. Dazu gehört das Stammelement, das zum Rendern der Komponente verwendet wird. Einmal definiert, verwenden Sie Autonomous Web Components wie jedes andere HTML-Element.

<my-button>



<p><strong>Custom Built-In Elements</strong> extend specific HTML elements.  For example, you may extend the HTMLButtonElement class or the HTMLAnchorElement.  These are meant to augment the functionality of existing HTML elements. To use a Custom Built-In element, you use the "is" attribute on the HTML element you are augmenting to tell it that it is an instance of the Web Component.<br>
</p>

<pre class="brush:php;toolbar:false"><button is="my-button">



<h3>
  
  
  Naming Web Components
</h3>

<p>When defining a Web Component, there are certain conventions that must be followed.  </p>

<p>Generally you will name your components similar to HTML elements with your own prefix attached to keep things simple (i.e. <my-button>).  The basic rules require that the element name start with a lowercase letter, and it must include a hyphen.  These guidelines will get you by for most cases, but I would recommend looking at the HTML spec if you're curious about all rules.<br>
</my-button></p>

<pre class="brush:php;toolbar:false"><!--Valid-->
<my-button></my-button>
<your-button></your-button>

<!--Invalid-->
<my-button></my-button>

<mybutton></mybutton>

Lebenszyklus-Hooks

Webkomponenten verfügen über spezifische Lebenszyklus-Hooks, die zum Reagieren auf verschiedene Phasen verwendet werden, die die Komponente durchläuft. Die Haken sind die folgenden:

  • connectedCallback -> Wird ausgeführt, wenn die Komponente an das DOM angehängt ist.
  • disconnectedCallback -> Wird ausgeführt, wenn die Komponente vom DOM getrennt wird.
  • adoptedCallback -> Wird jedes Mal ausgeführt, wenn die Komponente an ein neues DOM angehängt wird.
  • attributeChangedCallback -> Wird ausgeführt, wenn ein Attribut aus der Liste der „observedAttributes“ aktualisiert wird.
class MyComponent extends HTMLElement {
    static observedAttributes = ["btntype"]
    connectedCallback() {
        // Handle when the component is attached to the DOM
    }
    disconnectedCallback() {
        // Handle when the component is removed from the DOM
    }
    adoptedCallback() {
        // Handle when the component is attached to a new DOM
    }
    attributeChangedCallback(name, oldValue, newValue) {
        // Trigged when the "btntype" attribute is changed since it is in the list of observedAttributes.
        // "name" will be the name of the attribute that changed.
        // "oldValue" is the value before the change.
        // "newValue" is the new value after the change.
    }
}

Diese Lebenszyklus-Hooks werden für alle Initialisierungs- oder Bereinigungsarbeiten verwendet, die beim Erstellen/Zerstören von Komponenteninstanzen erforderlich sind. Der attributeChangedCallback ist besonders nützlich, da er ermöglicht, auf Aktualisierungen von Attributwerten zu reagieren. Webkomponenten verfügen über ein spezielles statisches Attribut namens „observedAttributes“, das ein Array von Attributnamen (Strings) sein soll, die den attributeChangedCallback auslösen.

Zugänglichkeit

Barrierefreiheit ist heute ein wichtiger Aspekt bei jeder Webentwicklung. Wenn es um Webkomponenten geht, verwenden Sie ARIA-Attribute genau wie in normalem HTML oder in einem Framework, aber im Allgemeinen erben Sie die integrierten Rollen und Barrierefreiheitsfunktionen der von Ihnen verwendeten HTML-Elemente.

Hier gelten die gleichen Richtlinien wie anderswo auch. Stellen Sie beispielsweise sicher, dass Sie beim Erstellen Ihrer Komponenten semantisches HTML verwenden, fügen Sie alle erforderlichen Tastaturfunktionen hinzu, die möglicherweise erforderlich sind, und stellen Sie sicher, dass Dinge wie Fokus und Farbkontrast ordnungsgemäß verwaltet werden.

Das Schatten-DOM

Das Shadow DOM ist wahrscheinlich der verwirrendste und umstrittenste Teil von Web Components. Das Shadow-DOM ist im Wesentlichen ein separater Teil des DOM, der sich in einer Webkomponente befindet

Das Shadow DOM ist hauptsächlich ein Problem für autonome Webkomponenten, da benutzerdefinierte integrierte Elemente nur zu vorhandenen HTML-Elementen hinzugefügt werden. Bei autonomen Webkomponenten gilt das benutzerdefinierte Tag, das das Element darstellt (d. h. ), als „Host“-Element. Innerhalb des Host-Elements befindet sich die „Schattenwurzel“. Im Schattenstamm wird das Markup für die Komponente gerendert.

Hier ist ein Beispiel, in dem Sie das „my-button“-Element als Host sehen, mit dem Shadow DOM darin.

Web Components: An Introduction

Beim Erstellen von Webkomponenten gibt es zwei Modi, auf die Sie das Shadow DOM einstellen können. Diese Modi sind „offen“ und „geschlossen“. Auf offene Shadow-DOMs kann mit JavaScript außerhalb des Shadow-Roots im Light-DOM zugegriffen werden, geschlossene Shadow-DOMs dagegen nicht.

customElements.define("my-component", MyComponentClass);

Alle Stile, die Sie im Shadow-DOM definieren, sind im Shadow-DOM gültig und beeinträchtigen nicht den Rest des Dokuments. Alle im „Light DOM“ (dem Rest des Dokuments) definierten Stile dringen nicht in das Shadow DOM ein (CSS-Variablen sind eine Ausnahme, aber darauf gehen wir hier nicht näher ein). Moderne Browser bieten Möglichkeiten, das Shadow-DOM mithilfe von CSS mithilfe von Teilen direkt vom Light-DOM aus anzusprechen. Sie können Teile zum Schatten-DOM Ihrer Komponente hinzufügen, indem Sie Teilattribute zu Ihrem Markup hinzufügen. Diese Teile können dann in CSS mithilfe des ::part-Pseudoselektors als Ziel ausgewählt werden. Das ist äußerst praktisch, aber von Natur aus ziemlich begrenzt. Sie können untergeordnete Selektoren nicht mit dem ::part-Selektor verketten. Sie können nur auf das spezifische Element abzielen, das ein „Teil“-Attribut innerhalb des Shadow-DOM hat.

Zugänglichkeit ist auch ein wichtiger Gesichtspunkt bei der Arbeit mit dem Shadow DOM. Wenn Sie jemals mit ARIA-Attributen gearbeitet haben, sind Sie mit „aria-describedby“ und „aria-labelledby“ vertraut, denen im Allgemeinen eine ID zugewiesen wird, die auf ein anderes Element verweist, das eine Beschriftung oder Beschreibung des Inhalts für Bildschirmleseprogramme enthält. Das Shadow-DOM verwaltet IDs ähnlich wie Stile separat, sodass Sie nicht vom Light-DOM auf eine ID verweisen können, die sich im Shadow-DOM befindet, und umgekehrt. Dies kann eine Herausforderung darstellen, wenn Sie versuchen, detaillierte Beschreibungen bereitzustellen, die Sie dynamisch bereitstellen müssen. Es gibt jedoch Problemumgehungen, auf die wir in dieser Einführung nicht näher eingehen.

Vorlagen und Slots

Vorlagen und Slots sind Tools, die in Kombination mit dem Shadow DOM verwendet werden können, um Webkomponenten zu verbessern. Vorlagen werden zum Erstellen wiederverwendbarer Snippets innerhalb von Webkomponenten verwendet, während Slots zum Aufdecken von „Lücken“ verwendet werden, in die Inhalte aus dem Light DOM übergeben werden können.

Vorlagen sind praktisch, wenn es einen HTML-Ausschnitt gibt, den Sie in einer Webkomponente immer wieder rendern müssen. Sie können auch außerhalb von Webkomponenten verwendet werden, haben jedoch eingeschränktere Anwendungsfälle. Sie werden mit dem Tag „template“ implementiert.

Slots werden zum Übergeben von Inhalten aus dem Light DOM an eine Webkomponente verwendet und mithilfe des „slot“-Tags implementiert. Dies ist praktisch, wenn Sie über eine generische Komponente verfügen, für deren Weitergabe möglicherweise dynamischer Inhalt erforderlich ist. Ein gutes Beispiel könnte eine generische Kartenkomponente sein, bei der Sie einen freigelegten Steckplatz für die Weitergabe von Markup in den Kartenkörper haben könnten. Slots verfügen über ein „Name“-Attribut, das Sie zur eindeutigen Identifizierung des Slots bereitstellen können. Dies ist praktisch, wenn Sie mehrere Slots in eine Webkomponente einfügen müssen. Wenn Sie Inhalte übergeben, können Sie einfach ein Attribut mit dem Wert „slot="your-slot-name" übergeben und der Inhalt wird an den Slot mit dem passenden Namen übergeben.

Slots und das Shadow DOM haben eine einzigartige Interaktion, die es wert ist, erwähnt zu werden. Slots können Standardinhalte haben, die gerendert werden, falls nichts übergeben wird. An Slots übergebene Inhalte befinden sich im Light-DOM und werden „flach kopiert“ in das Shadow-DOM. Sie können dies visuell im Browser-Inspektor sehen. Der Slot-Inhalt wird innerhalb der Webkomponente gerendert, aber im DOM befindet sich der Inhalt technisch gesehen außerhalb der Webkomponente und stellt einen Link zum Slot bereit.

Web Components: An Introduction

Davon abgesehen bedeutet das, dass alle Slot-Inhalte wie alle anderen Inhalte im Light DOM gestaltet und referenziert werden. Stile im Light DOM wirken sich auf den Slot-Inhalt aus, Shadow DOM-Stile hingegen nicht. Es stehen APIs für die Interaktion mit Slot-Inhalten innerhalb der Webkomponente zur Verfügung.

Unterstützung von Webkomponenten

Webkomponenten werden in modernen Browsern ziemlich gut unterstützt. Die Hauptausnahme ist Safari, das keine benutzerdefinierten integrierten Elemente unterstützt. Wenn Sie ältere Browser wie Internet Explorer 11 unterstützen müssen, müssen Sie einige Dinge mehrfach ausfüllen.

Grundlegende Beispiele

Nachdem wir nun eine kurze Einführung in alle Grundkonzepte erhalten haben, werfen wir einen Blick auf einige Beispiele.

Autonome benutzerdefinierte Elemente

Hier ist ein Beispiel für ein autonomes benutzerdefiniertes Element namens „my-button“:

customElements.define("my-component", MyComponentClass);

Das erste, was auffällt, ist, dass der Code größtenteils derselbe ist. Der größte Unterschied besteht darin, dass wir das HTMLButtonElement direkt erweitern und dann auch deklarieren, dass wir die Schaltfläche erweitern, wenn wir das benutzerdefinierte Element definieren.

Wir verbringen auch viel weniger Zeit damit, Code für die Darstellung des Elements zu schreiben. Da wir das HTMLButtonElement erweitern, ist die Komponente lediglich eine HTML-Schaltfläche mit zusätzlicher Leistung. Wir werden einer HTML-Schaltfläche mitteilen, dass es sich um eine „Mein-Schaltfläche“ handelt, indem wir das HTML-Attribut „is“ verwenden.

Hier ist das Beispiel live:

Auch hier werden Sie feststellen, dass wir das „is“-Attribut verwenden, um das vorhandene HTML-Schaltflächenelement zu erweitern. Sie werden auch feststellen, dass wir, genau wie bei den benutzerdefinierten Elementen von Autonomous, Ereignis-Listener anhängen und mit der Schaltfläche arbeiten können, wie wir es mit jedem anderen HTML-Element tun würden, was hier ohnehin sinnvoller ist, da es sich im wahrsten Sinne des Wortes nur um eine erweiterte HTML-Schaltfläche handelt.

Zusammenfassung

Webkomponenten sind eine einfache Möglichkeit, das Problem der Erstellung gemeinsam nutzbarer Komponenten zu lösen, die auf verschiedenen Seiten und Projekten wiederverwendet werden können. Sie funktionieren eher wie normale HTML-Elemente, was zu Verwirrung führen kann, aber letztendlich können sie äußerst nützlich sein und dabei helfen, viele der gleichen Probleme zu lösen, auf die moderne Frameworks abzielen.

Hier haben wir einen sehr einführenden Blick auf Webkomponenten, die verschiedenen Konzepte rund um sie und einige kurze Beispiele geworfen, die ihre grundlegende Funktion veranschaulichen. Von hier aus können wir damit beginnen, uns eingehender mit der Frage zu befassen, wie wir den Bau und die Nutzung dieser Geräte vereinfachen können, und untersuchen, wie wir mit einigen ihrer Schwachstellen umgehen können.

Wenn Sie interessiert sind, schauen Sie sich die Beispiele gerne auf GitHub an oder spielen Sie mit ihnen in Code Pen.

  • Beispiel für ein autonomes benutzerdefiniertes Element
  • Beispiel für ein benutzerdefiniertes integriertes Element
  • Beispiel für Bonus-Basisvorlagen!

Im nächsten Artikel werfen wir einen Blick darauf, wie wir die Verwendung von Vorlagen und Slots erweitern und das Rendern vereinfachen können. Bleiben Sie dran!

Das obige ist der detaillierte Inhalt vonWebkomponenten: Eine Einführung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
JavaScript -Datentypen: Gibt es einen Unterschied zwischen Browser und NodeJs?JavaScript -Datentypen: Gibt es einen Unterschied zwischen Browser und NodeJs?May 14, 2025 am 12:15 AM

JavaScript -Kerndatentypen sind in Browsern und Knoten.js konsistent, werden jedoch unterschiedlich als die zusätzlichen Typen behandelt. 1) Das globale Objekt ist ein Fenster im Browser und global in node.js. 2) Node.js 'eindeutiges Pufferobjekt, das zur Verarbeitung von Binärdaten verwendet wird. 3) Es gibt auch Unterschiede in der Leistung und Zeitverarbeitung, und der Code muss entsprechend der Umgebung angepasst werden.

JavaScript -Kommentare: Eine Anleitung zur Verwendung // und / * * /JavaScript -Kommentare: Eine Anleitung zur Verwendung // und / * * /May 13, 2025 pm 03:49 PM

JavaScriptUSESTWOTYPESOFCOMMENMENTEN: Einzelzeilen (//) und Multi-Linie (//). 1) Verwendung // Forquicknotesorsingle-Linexplanationen.2 Verwendung // ForlongerExPlanationsCompomentingingoutblocks-

Python gegen JavaScript: Eine vergleichende Analyse für EntwicklerPython gegen JavaScript: Eine vergleichende Analyse für EntwicklerMay 09, 2025 am 12:22 AM

Der Hauptunterschied zwischen Python und JavaScript sind die Typ -System- und Anwendungsszenarien. 1. Python verwendet dynamische Typen, die für wissenschaftliche Computer- und Datenanalysen geeignet sind. 2. JavaScript nimmt schwache Typen an und wird in Front-End- und Full-Stack-Entwicklung weit verbreitet. Die beiden haben ihre eigenen Vorteile bei der asynchronen Programmierung und Leistungsoptimierung und sollten bei der Auswahl gemäß den Projektanforderungen entschieden werden.

Python vs. JavaScript: Auswählen des richtigen Tools für den JobPython vs. JavaScript: Auswählen des richtigen Tools für den JobMay 08, 2025 am 12:10 AM

Ob die Auswahl von Python oder JavaScript vom Projekttyp abhängt: 1) Wählen Sie Python für Datenwissenschafts- und Automatisierungsaufgaben aus; 2) Wählen Sie JavaScript für die Entwicklung von Front-End- und Full-Stack-Entwicklung. Python ist für seine leistungsstarke Bibliothek in der Datenverarbeitung und -automatisierung bevorzugt, während JavaScript für seine Vorteile in Bezug auf Webinteraktion und Full-Stack-Entwicklung unverzichtbar ist.

Python und JavaScript: Verständnis der Stärken der einzelnenPython und JavaScript: Verständnis der Stärken der einzelnenMay 06, 2025 am 12:15 AM

Python und JavaScript haben jeweils ihre eigenen Vorteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1. Python ist leicht zu erlernen, mit prägnanter Syntax, die für Datenwissenschaft und Back-End-Entwicklung geeignet ist, aber eine langsame Ausführungsgeschwindigkeit hat. 2. JavaScript ist überall in der Front-End-Entwicklung und verfügt über starke asynchrone Programmierfunktionen. Node.js macht es für die Entwicklung der Vollstapel geeignet, die Syntax kann jedoch komplex und fehleranfällig sein.

JavaScripts Kern: Ist es auf C oder C aufgebaut?JavaScripts Kern: Ist es auf C oder C aufgebaut?May 05, 2025 am 12:07 AM

JavaScriptisnotbuiltoncorc; Es ist angehört, dass sich JavaScriptWasdedeSthatrunsonGineoFtencninc.

JavaScript-Anwendungen: Von Front-End bis Back-EndJavaScript-Anwendungen: Von Front-End bis Back-EndMay 04, 2025 am 12:12 AM

JavaScript kann für die Entwicklung von Front-End- und Back-End-Entwicklung verwendet werden. Das Front-End verbessert die Benutzererfahrung durch DOM-Operationen, und die Back-End-Serveraufgaben über node.js. 1. Beispiel für Front-End: Ändern Sie den Inhalt des Webseitentextes. 2. Backend Beispiel: Erstellen Sie einen Node.js -Server.

Python vs. JavaScript: Welche Sprache sollten Sie lernen?Python vs. JavaScript: Welche Sprache sollten Sie lernen?May 03, 2025 am 12:10 AM

Die Auswahl von Python oder JavaScript sollte auf Karriereentwicklung, Lernkurve und Ökosystem beruhen: 1) Karriereentwicklung: Python ist für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet, während JavaScript für die Entwicklung von Front-End- und Full-Stack-Entwicklung geeignet ist. 2) Lernkurve: Die Python -Syntax ist prägnant und für Anfänger geeignet; Die JavaScript -Syntax ist flexibel. 3) Ökosystem: Python hat reichhaltige wissenschaftliche Computerbibliotheken und JavaScript hat ein leistungsstarkes Front-End-Framework.

See all articles

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Nordhold: Fusionssystem, erklärt
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.