From acac3fb9f6581d444dce2868dd401bbe7ed6fd45 Mon Sep 17 00:00:00 2001
From: Sascha Schulz <sschulz@dh-software.de>
Date: Mo, 15 Jan 2024 18:26:51 +0100
Subject: [PATCH] Merge branch 'draft'
---
index.html | 73 +++++++++++++++++++++++++++++++++++-
1 files changed, 70 insertions(+), 3 deletions(-)
diff --git a/index.html b/index.html
index e2e7f58..0aacea8 100644
--- a/index.html
+++ b/index.html
@@ -3554,10 +3554,12 @@
</section>
<section>
<pre>
- <code class="js" data-trim data-line-numbers="1-15|17">
+ <code class="js" data-trim data-line-numbers="1-16|19">
<script type="text/template">
class HelloWorldComponent extends HTMLElement {
- connectedCallback() {
+ constructor() {
+ super();
+
const shadowRoot = this.attachShadow({mode: "open"});
shadowRoot.innerHTML = `
@@ -3581,6 +3583,29 @@
<iframe data-src="/assets/html/hello-world.html"></iframe>
</section>
<section>
+ <h4>Light DOM vs Shadow DOM</h4>
+ <img data-src="/assets/images/web-components-shadow-root.png" width="500px">
+ </section>
+ <section>
+ <h4>Suche von Elementen im Light- und Shadow DOM</h4>
+ <pre>
+ <code class="js" data-trim data-line-numbers>
+ <script type="text/template">
+ // Light DOM
+ const span = document.querySelector("span"); // Hi!
+ const divs = document.querySelectorAll("div");
+
+ console.log(divs.length); // => 1
+
+ // Shadow DOM
+ const helloWorld = document.querySelector("hello-world");
+
+ helloWorld.shadowRoot.querySelector("div"); // Hello World!
+ </script>
+ </code>
+ </pre>
+ </section>
+ <section>
<h3>Auf Attribute reagieren</h3>
<pre>
<code class="js" data-trim data-line-numbers="2|8-10">
@@ -3588,7 +3613,7 @@
class HelloWorldComponent extends HTMLElement {
static observedAttributes = ["my-attribute"];
- connectedCallback() {
+ constructor() {
// ...
}
@@ -3605,6 +3630,48 @@
<p>Lasse die eigene Komponente "hello-sayer" auf eine Änderung des "name"-Attributs reagieren, indem der dort eingetragene Name in der Komponente angezeigt wird (Beispiel: name="Joe" => Hello Joe!)</p>
<p>(/examples/templates/web-components/hello-sayer.html)</p>
</section>
+ <section>
+ <h3>Musterlösung</h3>
+ <pre>
+ <code class="js" data-trim data-line-numbers>
+ <script type="text/template">
+ class HelloSayerComponent extends HTMLElement {
+ static observedAttributes = ["name"];
+
+ constructor() {
+ super();
+
+ this.root = this.attachShadow({mode: "open"});
+
+ this.root.innerHTML = `
+ <style>
+ div {
+ background-color: coral;
+ color: white;
+ }
+ </style>
+ <div>Hello!</div>
+ `;
+ }
+
+ attributeChangedCallback(name, oldValue, newValue) {
+ this.root.querySelector("div").innerHTML = `Hello ${newValue}!`;
+ }
+ }
+
+ window.customElements.define("hello-sayer", HelloSayerComponent);
+
+ const names = ["Joe", "Allie"];
+ let counter = 0;
+
+ setInterval(() => document.querySelector("hello-sayer").setAttribute("name", names[counter++ % 2]), 2000);
+ </script>
+ </code>
+ </pre>
+ </section>
+ <section>
+ <iframe data-src="/assets/html/hello-sayer.html"></iframe>
+ </section>
</section>
</div>
</div>
--
Gitblit v1.9.3