„Vue“ vadovas

„Vue 3“ vienos bylos komponentai su tipizuotais propais, defineModel dvipusis susiejimas ir v-bind="$attrs" perdavimas.

Ką sukursite

Nedidelė kontaktų forma — laukas su žyma, siuntimo mygtukas, v-model susiejimas, tikras klaviatūros ir ekrano skaitytuvo elgesys — pirma plika, paskui apipavidalinta, per maždaug 10 minučių.

Prieš pradedant

Reikia git, Node 22 ar naujesnės ir pnpm 10 ar naujesnio. Tinka bet kuris „Vue 3“ projektas — „Nuxt“, „Vite“ arba paprastas „Vue“.

1 žingsnis — Gaukite kodą

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

Komponentai yra plokščios bylos aplanke components/ — Button.vue, TextInput.vue — kiekvienas su savo testu, story ir dokumentacija šalia. Nukopijuokite reikalingas bylas arba pasiimkite saugyklą.

2 žingsnis — Jūsų pirmasis komponentas

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

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

Atvaizduoja <button class="button" type="button">. Propai atitinka kitas sistemas: type, disabled, pressed, label, plius atributų praleidimas visam kitam.

3 žingsnis — Sudėkite nedidelę formą

<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 priima matomą label kaip savo prop vietoj įdėto žymos komponento — perduokite ją vieną kartą, prie Fieldir TextInputiš label suteikia prieinamą pavadinimą.

Patikrinta 2026-08-29: ankstesnis juodraštis įdėjo atskirą Label viduje Field, todėl buvo atvaizduotos dvi žymos (viena tuščia), nes Field jau pats atvaizduoja savo iš label prop — pastebėta sukompiliavus tikslų fragmentą. Maršrutas Sudėtinis kontaktų formos maršrutas yra tas pats šablonas, išbandytas tikrais e2e ir axe testais.

TextInput naudoja defineModel, todėl paprastas v-model veikia iš karto.

Patikrinkite savo darbą: paleiskite programą ir forma atrodo plika — kaip ir numatyta: stilius dar laukia. Paspauskite Tab: fokusas pereina per kiekvieną valdiklį, žyma paskelbiama, o siuntimas veikia. Elgesys baigtas; išvaizda jūsų ir yra kitas žingsnis.

4 žingsnis — Apipavidalinkite

Apipavidalinkite klasių kablius — .button, .text-input, .label, .field — savo stilių lentelėje arba susiekite paruoštą temą faile index.html / nuxt.config:

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

5 žingsnis — Pažiūrėkite, kaip viskas veikia

„Nuxt“ pavyzdinė programa yra visas katalogas apipavidalintas ir pademonstruotas, su „Playwright“ e2e ir axe-core pradine riba:

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

Tolesni žingsniai

Klausimų pakeliui? Pagalbos puslapis pilnas atsakymų — o jei kuris nors žingsnis galėtų būti aiškesnis, pasakykite mums ir mielai patobulinsime vadovą.