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
*.vuemoż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
*.vuemoż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
*.vuemoż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
*.vuemoże zawierać wiele tagów<style>.Znacznik
<style>może mieć atrybutyscopedlubmodule(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.vuemoż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 -->.