| | |
| | | <ul> |
| | | <li>JavaScript</li> |
| | | <li>Responsive Design</li> |
| | | <li>NodeJS</li> |
| | | <li>WebComponents / lit</li> |
| | | <li>NodeJS</li> |
| | | <li>Datenbank</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | | <h3>Betrieb</h3> |
| | | <ul> |
| | | <li>Server einrichten</li> |
| | | <li>SSL- / TLS-Zertifikate</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | |
| | | <li>Progressive Web Application</li> |
| | | <li>CEF / Electron</li> |
| | | <li>WebAssembly</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | | <h3>Betrieb</h3> |
| | | <ul> |
| | | <li>Server einrichten</li> |
| | | <li>SSL- / TLS-Zertifikate</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | |
| | | <h3>Aufgabe</h3> |
| | | <p>Entwickle eine Tab-Komponente (Vorlage "tab-componenmt.html"), welche beim Click auf einen Registerreite / Tab ein Event feuert, welches die Außenwelt über das gerade aktivierte Tab (tab-id) informiert</p> |
| | | </section> |
| | | <section> |
| | | <h3>Lösung</h3> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | this.root.innerHTML = ` |
| | | <style> |
| | | ::slotted(div) { |
| | | display: none; |
| | | } |
| | | |
| | | ::slotted(div.active) { |
| | | display: block; |
| | | } |
| | | </style> |
| | | |
| | | <div><slot name="tab"></slot></div> |
| | | <div><slot name="content"></slot></div> |
| | | `; |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | connectedCallback() { |
| | | const firstContent = this.querySelector("div"); |
| | | |
| | | firstContent.classList.add("active"); |
| | | |
| | | this.addEventListener("click", (e) => { |
| | | if (e.target.tagName === "SPAN" && e.target.hasAttribute("tab-id")) { |
| | | const oldContent = this.querySelector("div.active"); |
| | | const newContent = this.querySelector(`[tab-id="${e.target.getAttribute("tab-id")}"]`); |
| | | |
| | | oldContent.classList.remove("active"); |
| | | newContent.classList.add("active"); |
| | | |
| | | this.dispatchEvent(new CustomEvent("tabclick", {composed: true, bubbles: true, detail: e.target.getAttribute("tab-id"), cancelable: true})); |
| | | } |
| | | }); |
| | | } |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | </section> |
| | | <section> |
| | | <section> |
| | | |
| | | </section> |
| | | </section> |
| | | </div> |
| | | </div> |