Vue oktatóanyag

Vue 3 egyfájlos komponensek típusos propokkal, defineModel kétirányú kötéssel és v-bind="$attrs" átengedéssel.

Mit fogsz építeni

Egy kis kapcsolatfelvételi űrlap — címkézett mező, küldés gomb, v-model kötés, valódi billentyűzet- és képernyőolvasó-viselkedés — először csupaszon, aztán stílusosan, nagyjából 10 perc alatt.

Mielőtt elkezdenéd

Szükséged van gitre, Node 22-re vagy újabbra és pnpm 10-re vagy újabbra. Bármelyik Vue 3 projekt megfelel — Nuxt, Vite vagy sima Vue.

1. lépés — Szerezd meg a kódot

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-vue-headless
pnpm install
pnpm test        # vitest + @testing-library/vue
pnpm run storybook   # browse all 571 components

A komponensek lapos fájlok itt: components/ — Button.vue, TextInput.vue — mindegyik saját teszttel, story-val és dokumentációval a háta mögött. Másold a szükséges fájlokat, vagy hozd be a tárolót.

2. lépés — Az első komponensed

<script setup>
import Button from "lily-design-system-vue-headless/components/Button.vue";
</script>

<template>
  <Button @click="save">Save</Button>
</template>

Ezt rendereli: <button class="button" type="button">. A propok megfelelnek a többi keretrendszernek: type, disabled, pressed, label, plusz attribútum-átengedés mindenre, ami marad.

3. lépés — Állíts össze egy kis űrlapot

<script setup>
import { ref } from "vue";
import Form from ".../components/Form.vue";
import Field from ".../components/Field.vue";
import TextInput from ".../components/TextInput.vue";
import Button from ".../components/Button.vue";

const name = ref("");
</script>

<template>
  <Form @submit="handleSubmit">
    <Field label="Full name" required>
      <TextInput id="name" label="Full name" v-model="name" required />
    </Field>
    <Button type="submit">Save</Button>
  </Form>
</template>

Field a látható label a saját propjaként beágyazott címkekomponens helyett — add át egyszer, a Fieldés TextInputa label biztosítja a hozzáférhető nevet.

Ellenőrizve 2026-08-29: egy korábbi vázlat külön Label belül a Fieldelembe, ami két címkét renderelt (az egyik üres), mert a Field már magától rendereli a sajátját a label prop — a pontos kódrészlet lefordításával derült ki. A Az összeállított kapcsolatfelvételi űrlap útvonala ugyanez a minta, valódi e2e- és axe-tesztekkel kipróbálva.

TextInput ezt használja: defineModel, így egy sima v-model dobozból kivéve működik.

Ellenőrizd a munkádat: indítsd el az alkalmazást, és az űrlap csupasznak látszik — pontosan úgy, ahogy szántuk: a stílus még hátravan. Nyomd meg a Tabbillentyűt: a fókusz végigmegy minden vezérlőn, a címkét bemondja, és a küldés működik. A viselkedés kész; a megjelenés a tiéd, és a következő lépés.

4. lépés — Stílus hozzá

Stílusozd az osztálykampókat — .button, .text-input, .label, .field — a stíluslapodban, vagy hivatkozz egy kész témára itt: index.html / nuxt.config:

<link rel="stylesheet" href="/themes/nord.css" />

5. lépés — Nézd meg, ahogy az egész működik

A Nuxt példaalkalmazás a teljes katalógus stílusosan és bemutatva, Playwright e2e-vel és axe-core alapvonallal:

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-vue-nuxt-examples
pnpm install && pnpm run dev

További lépések

Kérdésed akad útközben? A súgóoldal tele van válaszokkal — és ha egy lépés érthetőbb lehetne, szólj nekünk és szívesen javítjuk az oktatóanyagot.