SFC Syntax Specification
Informacje ogólne
Vue Single-File Component (SFC), konwencjonalnie używający rozszerzenia pliku *.vue
, to niestandardowy format pliku, który wykorzystuje składnię podobną do HTML do opisu komponentu Vue. Vue SFC jest składniowo kompatybilny z HTML.
Każdy plik *.vue
składa się z trzech typów bloków językowych najwyższego poziomu: <template>
, <script>
i <style>
oraz opcjonalnie dodatkowych bloków niestandardowych:
vue
<template> <div class="example">{{ msg }}</div> </template> <script> export default { data() { return { msg: 'Hello world!' } } } </script> <style> .example { color: red; } </style> <custom1> This could be e.g. documentation for the component. </custom1>
Bloki językowe
<template>
Każdy plik
*.vue
może zawierać co najwyżej jeden blok najwyższego poziomu<template>
.Zawartość zostanie wyodrębniona i przekazana do
@vue/compiler-dom
, wstępnie skompilowana do funkcji renderowania JavaScript i dołączona do eksportowanego komponentu jako jego opcjarender
.
<script>
Każdy plik
*.vue
może zawierać co najwyżej jeden blok<script>
(z wyłączeniem<script setup>
).Skrypt jest wykonywany jako moduł ES.
Domyślnym eksportem powinien być obiekt opcji komponentu Vue, albo jako zwykły obiekt, albo jako wartość zwrotna defineComponent.
<script setup>
Każdy plik
*.vue
może zawierać co najwyżej jeden blok<script setup>
(wyłączając normalny<script>
).Skrypt jest wstępnie przetwarzany i używany jako funkcja
setup()
komponentu, co oznacza, że będzie wykonywany dla każdej instancji komponentu. Wiązania najwyższego poziomu w<script setup>
są automatycznie eksponowane na szablon. Więcej szczegółów można znaleźć w dedykowanej dokumentacji<script setup>
.
<style>
Pojedynczy plik
*.vue
może zawierać wiele tagów<style>
.Znacznik
<style>
może mieć atrybutyscoped
lubmodule
(zobacz SFC Style Features po więcej szczegółów) by pomóc w enkapsulacji stylów do bieżącego komponentu. Wiele tagów<style>
z różnymi trybami enkapsulacji może być mieszanych w tym samym komponencie.
Bloki niestandardowe
Dodatkowe niestandardowe bloki mogą być zawarte w pliku *.vue
dla dowolnych potrzeb specyficznych dla projektu, na przykład blok <docs>
. Niektóre rzeczywiste przykłady niestandardowych bloków obejmują:
Obsługa bloków niestandardowych będzie zależeć od narzędzi - jeśli chcesz zbudować własne niestandardowe integracje bloków, zobacz sekcję [SFC custom block integrations tooling section] (/guide/scaling-up/tooling#sfc-custom-block-integrations), aby uzyskać więcej informacji.
Automatyczne wnioskowanie o nazwach
SFC automatycznie wywnioskuje nazwę komponentu z jego nazwy pliku w następujących przypadkach:
- Formatowanie ostrzeżeń dla deweloperów
- Inspekcja DevTools
- Rekursywne samoodniesienie, np. plik o nazwie
FooBar.vue
może odnosić się do siebie jako<FooBar/>
w swoim szablonie. Ma to niższy priorytet niż jawnie zarejestrowane/zaimportowane komponenty.
Pre-Processors
Bloki mogą deklarować języki preprocesora przy użyciu atrybutu lang
. Najczęstszym przypadkiem jest użycie TypeScript dla bloku <script>
:
template
<script lang="ts"> // use TypeScript </script>
lang
można zastosować do dowolnego bloku - na przykład możemy użyć <style>
z Sass i <template>
z Pug:
template
<template lang="pug"> p {{ msg }} </template> <style lang="scss"> $primary-color: #333; body { color: $primary-color; } </style>
Należy pamiętać, że integracja z różnymi preprocesorami może się różnić w zależności od łańcucha narzędzi. Przykłady można znaleźć w odpowiedniej dokumentacji:
src
Imports
Jeśli wolisz podzielić swoje komponenty *.vue
na wiele plików, możesz użyć atrybutu src
do zaimportowania zewnętrznego pliku dla bloku językowego:
vue
<template src="./template.html"></template> <style src="./style.css"></style> <script src="./script.js"></script>
Należy pamiętać, że importy src
są zgodne z tymi samymi zasadami rozwiązywania ścieżek, co żądania modułów webpack, co oznacza:
- Względne ścieżki muszą zaczynać się od
./
. - Możesz importować zasoby z zależności npm:
vue
<!-- importowanie pliku z zainstalowanego pakietu npm „todomvc-app-css” --> <style src="todomvc-app-css/index.css" />
Import src
działa również z niestandardowymi blokami, np:
vue
<unit-test src="./unit-test.js"> </unit-test>
Komentarze
Wewnątrz każdego bloku należy użyć składni komentarza używanego języka (HTML, CSS, JavaScript, Pug itp.). W przypadku komentarzy najwyższego poziomu należy używać składni komentarzy HTML: <!-- treść komentarza tutaj -->
.