javascript / expert
Snippet
Eigene Web-Element-Definition mit Shadow-DOM-Attribut-Reflektion
Vues `defineCustomElement` wandelt reguläre Vue-Komponenten in native Web Components mit Shadow DOM um. Deklarierte Props werden automatisch in HTML-Attribute reflektiert und Events als native DOM-CustomEvents gesendet.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { defineCustomElement, h } from 'vue';const CustomBadgeElement = defineCustomElement({props: {variant: { type: String, default: 'info' }},emits: ['badgeClick'],setup(props, { emit }) {return () => h('button', {class: `badge-${props.variant}`,onClick: (e) => emit('badgeClick', e)}, [h('slot')]);}});customElements.define('x-custom-badge', CustomBadgeElement);
vue
Erklärung
1
const CustomBadgeElement = defineCustomElement({
Kompiliert ein Vue-Options-Objekt in einen nativen HTMLElement-Klassenkonstruktor.
2
onClick: (e) => emit('badgeClick', e)
Löst ein Event in der Komponente aus, welches als DOM CustomEvent weitergeleitet wird.
3
customElements.define('x-custom-badge', CustomBadgeElement);
Registriert den kompilierten Konstruktor im Custom-Element-Register des Browsers.