Специфікація синтаксису одно-файлових компонент
Огляд
Одно-файловий компонент Vue (SFC), який традиційно використовує розширення файлу *.vue, є спеціальним форматом файлу, який використовує HTML-подібний синтаксис для опису компонента Vue. Одно-файловий компонент Vue синтаксично сумісний з HTML.
Кожен файл *.vue складається з трьох типів мовних блоків верхнього рівня: <template>, <script> і <style>, а також додаткових користувацьких блоків:
vue
<template>
<div class="example">{{ msg }}</div>
</template>
<script>
export default {
data() {
return {
msg: 'Hello world!'
}
}
}
</script>
<style>
.example {
color: red;
}
</style>
<custom1>
Це може бути напр. документація для компонента.
</custom1>Мовні блоки
<template>
Кожен файл
*.vueможе містити не більше одного блоку<template>верхнього рівня.Вміст буде витягнуто та передано до
@vue/compiler-dom, де попередньо скомпілюється в JavaScript функцію рендерингу і приєднано до компонента, що експортується, як його опціяrender.
<script>
Кожен файл
*.vueможе містити не більше одного блоку<script>(за винятком<script setup>).Сценарій виконується як ES модуль.
Експорт за промовчанням повинен бути об'єктом опцій компонента Vue, або звичайним об'єктом, або як значення, що повертається defineComponent.
<script setup>
Кожен файл
*.vueможе містити не більше одного блоку<script setup>(за винятком звичайного<script>).Сценарій попередньо обробляється і використовується як функція компонента
setup(), що означає, що вона виконуватиметься для кожного екземпляра компонента. Прив'язки верхнього рівня<script setup>автоматично оголошуються в шаблоні. Більш детальну інформацію можна знайти на спеціальній сторінці документації<script setup>
<style>
Один файл
*.vueможе містити кілька тегів<style>.Тег
<style>може мати атрибутиscopedабоmodule(додаткову інформацію див. у розділі можливості стилів одно-файлового компонента, щоб допомогти інкапсулювати стилі в поточний компонент. В одному компоненті можна змішувати кілька тегів<style>з різними режимами інкапсуляції.
Користувацькі блоки
Додаткові користувацькі блоки можна включити у файл *.vue для будь-яких потреб конкретного проєкту, наприклад, блок <docs>. Деякі реальні приклади спеціальних блоків включають:
Обробка користувацьких блоків залежатиме від інструментів. Якщо ви хочете створити власні користувацькі інтеграції блоків, див. відповідний розділ інструментів, щоб отримати докладнішу інформацію.
Автоматичне визначення імені
Одно-файлові компоненти автоматично визначають ім'я компонента на ім'я файлу в таких випадках:
- Форматування попереджень під час розробки
- Інспектування у DevTools
- Рекурсивне посилання на самого себе, наприклад, файл з ім'ям
FooBar.vueможе посилатися на себе як<FooBar/>у своєму шаблоні. Це має нижчий пріоритет, ніж явно зареєстровані/імпортовані компоненти.
Пре-процесори
У блоках можна оголосити мову пре-процесора за допомогою атрибуту lang. Найпоширенішим випадком є використання TypeScript для блоку <script>:
template
<script lang="ts">
// використовуємо TypeScript
</script>lang можна застосувати до будь-якого блоку - наприклад, ми можемо використовувати <style> з Sass і <template> з [Pug](https:/ /pugjs.org/api/getting-started.html):
template
<template lang="pug">
p {{ msg }}
</template>
<style lang="scss">
$primary-color: #333;
body {
color: $primary-color;
}
</style>Зауважте, що інтеграція з різними пре-процесорами може відрізнятися залежно від ланцюжка інструментів. Перегляньте відповідну документацію для прикладів:
Імпорти src
Якщо ви віддаєте перевагу розділенню ваших компонентів *.vue на кілька файлів, ви можете використовувати атрибут src, щоб імпортувати зовнішній файл для мовного блоку:
vue
<template src="./template.html"></template>
<style src="./style.css"></style>
<script src="./script.js"></script>Пам’ятайте, що імпорт src дотримується тих самих правил вирішення шляху, що й запити модуля webpack, що означає:
- Відносні шляхи повинні починатися з
./ - Ви можете імпортувати ресурси із залежностей npm:
vue
<!-- імпорт файлу із встановленого npm-пакету "todomvc-app-css" -->
<style src="todomvc-app-css/index.css" />src імпорт також працює з користувацькими блоками, напр.:
vue
<unit-test src="./unit-test.js">
</unit-test>Коментарі
У кожному блоці слід використовувати синтаксис коментарів мови (HTML, CSS, JavaScript, Pug, і т.д.). Для коментарів верхнього рівня слід використовувати синтаксис HTML-коментарів:: <!-- comment contents here -->
