Specifikace syntaxe SFC
Přehled
Vue Single-File komponenta (SFC), dle konvence označována příponou *.vue
, je proprietární formát souboru, který používá syntaxi podobnou HTML k popisu Vue komponent. Vue SFC je syntakticky kompatibilní s HTML.
Každý soubor *.vue
se skládá ze tří typů bloků nejvyšší úrovně: <template>
, <script>
a <style>
, a volitelně dalších vlastních bloků:
vue
<template>
<div class="example">{{ msg }}</div>
</template>
<script>
export default {
data() {
return {
msg: 'Ahoj, Vue!'
}
}
}
</script>
<style>
.example {
color: red;
}
</style>
<custom1>
Toto může být například dokumentace komponenty.
</custom1>
Jazykové bloky
<template>
Každý soubor
*.vue
může obsahovat maximálně jeden blok<template>
nejvyšší úrovně.Obsah bude extrahován a předán do
@vue/compiler-dom
, předkompilován do JavaScriptových funkcí pro vykreslování a připojen k exportované komponentě jako její možnost (option)render
.
<script>
Každý soubor
*.vue
může obsahovat maximálně jeden blok<script>
(s výjimkou<script setup>
).Skript je spuštěn jako ES modul.
Default export by měl být objekt s možnostmi Vue komponenty, buď jako prostý objekt nebo jako návratová hodnota funkce defineComponent.
<script setup>
Každý soubor
*.vue
může obsahovat maximálně jeden blok<script setup>
(s výjimkou normálního<script>
).Skript je předzpracován a používán jako
setup()
funkce komponenty, což znamená, že bude spuštěn pro každou instanci komponenty. Hlavní (top-level) vazby uvnitř<script setup>
jsou automaticky vystaveny šabloně. Pro více informací se podívejte na samostatnou dokumentaci pro<script setup>
.
<style>
Každý soubor
*.vue
může obsahovat více bloků<style>
.Element
<style>
může mít atributyscoped
nebomodule
(podrobnosti naleznete na stránce CSS funkce pro SFC), které pomáhají zapouzdřit styly do aktuální komponenty. V jedné komponentě mohou být smíchány různé značky<style>
s různými režimy zapouzdření.
Vlastní bloky
Do souboru *.vue
můžete navíc přidat další vlastní bloky pro potřeby konkrétního projektu, například blok <docs>
. Některé příklady vlastních bloků z reálného světa zahrnují:
Zpracování vlastních bloků závisí na nástrojích - pokud chcete vytvořit vlastní integrace, podívejte se pro další informace na sekci Nástroje pro integraci vlastních SFC bloků.
Automatické odvození názvu
SFC v následujících případech automaticky odvozuje název komponenty z jejího názvu souboru:
- Formátování varování pro vývojáře
- Inspekce v DevTools
- Rekurzivní odkaz na sebe sama, například soubor pojmenovaný
FooBar.vue
se může ve své šabloně odkazovat sám na sebe jako<FooBar/>
. Toto má nižší prioritu než explicitně registrované/importované komponenty.
Pre-Procesory
Bloky mohou pomocí atributu lang
deklarovat programovací jazyk, v němž má proběhnout pre-processing. Nejběžnější případ je použití TypeScriptu pro blok <script>
:
template
<script lang="ts">
// použití TypeScriptu
</script>
lang
lze použít na jakýkoli blok - například můžeme použít <style>
se Sass a <template>
+ Pug:
template
<template lang="pug">
p {{ msg }}
</template>
<style lang="scss">
$primary-color: #333;
body {
color: $primary-color;
}
</style>
Dejte pozor, že integrace s různými pre-procesory se může lišit podle zvolené sady softwarových nástrojů. Pro příklady se podívejte do příslušné dokumentace:
Importy src
Pokud dáváte přednost rozdělení vašich *.vue
komponent do více souborů, můžete použít atribut src
pro import externího souboru do příslušného bloku jazyka:
vue
<template src="./template.html"></template>
<style src="./style.css"></style>
<script src="./script.js"></script>
Pozor na to, že pro importy pomocí src
platí stejná pravidla pro zadávání cest jako pro požadavky na webpack moduly, což znamená:
- Relativní cesty musí začínat s
./
- Můžete importovat zdroje z npm závislostí:
vue
<!-- import souboru z nainstalovaného npm balíčku "todomvc-app-css" -->
<style src="todomvc-app-css/index.css" />
src
importy fungují í s vlastními bloky, např.:
vue
<unit-test src="./unit-test.js">
</unit-test>
Komentáře
V každém bloku byste měli používat syntaxi komentářů používanou v daném jazyce (HTML, CSS, JavaScript, Pug, atd.). Pro komentáře na nejvyšší úrovni použijte syntaxi HTML komentářů: <!-- obsah komentáře -->