Vue
Die Komponenten Schritt für Schritt in eine Vue-3- oder Nuxt-Anwendung einbauen.
Vue 3 kommt von Haus aus mit Custom Elements zurecht: es setzt DOM-Properties, Objekte und Arrays brauchen also keinen Wrapper. Bekannt sein müssen ihm nur die Tags, die Custom Elements sind, sonst warnt der Compiler über unbekannte Komponenten.
1. Installieren
2. Dem Compiler die Tags bekannt machen
Jedes Tag beginnt mit tuix-, eine Regel deckt also die ganze Bibliothek ab.
3. Elemente registrieren
Die Bibliothek einmal dort importieren, wo die App erzeugt wird:
Das Stylesheet holt zugleich Rubik vom Tuix-CDN.
In Nuxt muss der Import auf dem Client bleiben, denn die Elemente erweitern
HTMLElement, das es beim Server-Rendern nicht gibt:
Die Endung .client hält es aus dem Server-Bundle heraus. Das
server-gerenderte Markup enthält die Tags weiterhin; sie upgraden, sobald das
Plugin läuft.
4. Verwenden
Properties statt Attribute
Bei v-bind prüft Vue, ob der Name am Element existiert, und setzt ihn dann als
Property. Gebunden wird deshalb mit der Schreibweise der Property:
Der Modifier .prop erzwingt es, falls nötig:
:options.prop="countries".
Events
Jedes Event bindet mit @ unter seinem eigenen Namen, camelCase eingeschlossen,
sobald isCustomElement das Tag als Element ausweist:
@customClick funktioniert, weil Vue die Schreibweise eines Listener-Namens mit
Grossbuchstaben beibehält, sobald das Tag ein Element und keine Komponente ist:
"these may be custom elements' custom events", wie es im Compiler steht. Alle
anderen Namen sind ohnehin kleingeschrieben, keiner muss also anders geschrieben
werden als in der Events-Referenz.
Ein dynamischer Name (@[clickEvent]) ist hier der falsche Weg: genau diese Form bricht. Ein dynamischer Name wird
zu onCustomClick kompiliert, was Vue zu custom-click umschreibt, und der Handler läuft nie. @customClick wird
direkt gebunden.
Eine Template-Ref geht genauso und liest sich besser, sobald mehrere Handler im Spiel sind:
v-model
v-model funktioniert an diesen Elementen nicht, denn sie emittieren
on-change statt update:modelValue. Es bleiben der Wert plus der Handler oder
eine kleine Vue-Komponente um das Element, die modelValue anbietet:
Fehlersuche
| Symptom | Ursache |
|---|---|
Failed to resolve component: tuix-button | isCustomElement ist für das verwendete Build-Tool nicht konfiguriert |
HTMLElement is not defined beim Nuxt-Build | Die Bibliothek wird auf dem Server importiert; in ein .client-Plugin verschieben |
| Ein camelCase-Event feuert nie | Mit dynamischem Namen gebunden; @customClick direkt binden |
| Eine Array-Prop kommt als String an | Sie wurde als statisches Attribut statt mit : gebunden |
| Das Feld ändert sich nie | Der Wert wird aus dem Change-Handler nicht zurückgeschrieben |