Slide 1

Slide 1 text

Einführung in Web- Components 2 6 . N o v e m b e r 2 0 1 9 K ö l n / J V M - C o n

Slide 2

Slide 2 text

MICHAEL VITZ Senior Consultant bei INNOQ Deutschland GmbH @michaelvitz

Slide 3

Slide 3 text

Komponenten im Web

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

5 http://atomicdesign.bradfrost.com

Slide 6

Slide 6 text

Atomic Design

Slide 7

Slide 7 text

https://innoq.style/components/detail/alert--error.html

Slide 8

Slide 8 text

Bestandteile HTML CSS vermutlich JavaScript möglicherweise Optimiere das Aussehen Optimiere die UX Mach es Funktional

Slide 9

Slide 9 text

Web-Components

Slide 10

Slide 10 text

Web-Components •Erlauben das Definieren von eigenen HTML Elementen •Set von Web APIs •Custom Elements •Shadow DOM •HTML Template •ES Modules (wird im Vortrag nicht behandelt) https://www.webcomponents.org/introduction

Slide 11

Slide 11 text

Custom Elements

Slide 12

Slide 12 text

Autonomous Custom Element

Achtung

Etwas schlimmes ist passiert!

class MyAlert extends HTMLElement { … } customElements.define('my-alert', MyAlert);

Slide 13

Slide 13 text

13 Kennen wir das nicht woher? https://www.primefaces.org/showcase/ui/data/datatable/filter.xhtml

Slide 14

Slide 14 text

Customized Built-In Element Some Link class EmbeddableContent extends HTMLAnchorElement { … } customElements.define(‘embeddable-content', EmbeddableContent, {extends: ‘a'});

Slide 15

Slide 15 text

Custom Element API •constructor()
 // instance is created •connectedCallback()
 // instance is inserted into DOM •disconnectedCallback()
 // instance is removed from DOM •attributeChangedCallback(attrName, oldVal, newVal)
 // one of observed attributes changed -> static get observedAttributes() •adoptedCallback()
 // instance is adopted via document.adoptNode(el)

Slide 16

Slide 16 text

https://caniuse.com/#search=custom%20elements Polyfill

Slide 17

Slide 17 text

Shadow DOM

Slide 18

Slide 18 text

Shadow DOM •Ermöglicht stärkere Kapselung der Komponente this.attachShadow({mode: 'open'}); oder this.attachShadow({mode: 'closed'});

Slide 19

Slide 19 text

https://caniuse.com/#search=shadow%20DOM Polyfill

Slide 20

Slide 20 text

HTML Template

Slide 21

Slide 21 text

HTML Template •Ermöglicht User ein Template anzugeben das von der Komponente verwendet wird

Achtung

Es passiert!

Ihnen wird nichts passieren.

Slide 22

Slide 22 text

https://caniuse.com/#search=html%20templates

Slide 23

Slide 23 text

Krischerstr. 100 40789 Monheim am Rhein Germany +49 2173 3366-0 Ohlauer Str. 43 10999 Berlin Germany +49 2173 3366-0 Ludwigstr. 180E 63067 Offenbach Germany +49 2173 3366-0 Kreuzstr. 16 80331 München Germany +49 2173 3366-0 Hermannstrasse 13 20095 Hamburg Germany +49 2173 3366-0 Gewerbestr. 11 CH-6330 Cham Switzerland +41 41 743 0116 innoQ Deutschland GmbH innoQ Schweiz GmbH www.innoq.com Danke! Fragen? Michael Vitz [email protected] +49 151 19116015 @michaelvitz https:/ /www.innoq.com/de/talks/2019/11/jvm-con-2019-web-components