Специфікація синтаксису одно-файлових компонент
Огляд
Одно-файловий компонент 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 -->