# Especificación de la Sintaxis SFC
# Introducción
Un archivo *.vue
es un formato de archivo personalizado utilizando sintaxis similar a HTML para describir un componente Vue. Cada archivo *.vue
consiste de tres tipos de bloques de lenguaje de nivel superior: <template>
, <script>
, y <style>
, y opcionalmente bloques personalizados adicionales:
<template>
<div class="example">{{ msg }}</div>
</template>
<script>
export default {
data() {
return {
msg: '¡Hola mundo!'
}
}
}
</script>
<style>
.example {
color: red;
}
</style>
<custom1>
Este podría ser p. ej. documentación para el componente.
</custom1>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Bloques de Lenguaje
# <template>
Cada archivo
*.vue
puede contener a lo más un bloque<template>
de nivel superior al mismo tiempo.Los contenidos será extraidos y pasados a
@vue/compiler-dom
, precompilados a funciones JavaScript de render, y adjuntados al componente exportado como su opciónrender
.
# <script>
Cada archivo
*.vue
puede contener a lo más un bloque<script>
al mismo tiempo (excepto<script setup>
).El script es ejecutado como un módulo ES.
La exportación por defecto debe ser un objeto de opciones de componente Vue, tanto un objeto plano como el valor retornado de defineComponent.
# <script setup>
Cada archivo
*.vue
puede contener a lo más un bloque<script setup>
al mismo tiempo (excepto el<script>
normal).El script es preprocesado y utilizado como la función
setup()
del componente, lo que significa que será ejecutado para cada instancia del componente. Las vinculaciones de nivel superior en<script setup>
son automáticamente expuestos a la plantilla. Para más detalles, vea documentación dedicada sobre<script setup>
.
# <style>
Un solo archivo
*.vue
puede contener múltiples etiquetas<style>
.Una etiqueta
<style>
puede tener atributosscoped
omodule
(vea características de estilos de sfc para más detalles) para ayudar a encapsular los estilos al componente actual. Múltiples etiquetas<style>
con diferentes modos de encapsulación se pueden mezclar en el mismo componente.
# Bloques Personalizados
Se pueden incluir bloques personalizados adicionales en un archivo *.vue
para cualquiera necesidad específica para el proyecto, por ejemplo un bloque <docs>
. Algunos ejemplos de bloques personalizados del mundo real incluyen:
- Gridsome:
<page-query>
(opens new window) - vite-plugin-vue-gql:
<gql>
(opens new window) - vue-i18n:
<i18n>
(opens new window)
El manejamiento de bloques personalizados dependerá de las herramientas, si quiere construir sus propios integraciones de bloques personalizados, vea herramienta de sfc para más detalles.
# Inferencia de name
Automática
Un SFC automáticamente infiere el nombre del componente de su nombre de archivo (filename) en los siguientes casos:
- El formateo de advertencias de desarrollo (Dev warning formatting)
- La inspección de DevTools (DevTools inspection)
- La autorreferencia recursiva. P. ej. un archivo llamado
FooBar.vue
puede referirse como<FooBar/>
en su plantilla. Este tiene menor prioridad que components registrados/importados explícitamente.
# Preprocesadores (Pre-Processors)
Los bloques pueden declarar lenguajes de preprocesadores utilizando el atributo lang
. La más común caso es utilizar TypeScript para el bloque <script>
:
<script lang="ts">
// utilizar TypeScript
</script>
2
3
lang
puede ser aplicado a cualquier bloque, por ejemplo podemos utilizar <style>
con SASS (opens new window) y <template>
con Pug (opens new window):
<template lang="pug">
p {{ msg }}
</template>
<style lang="scss">
$primary-color: #333;
body {
color: $primary-color;
}
</style>
2
3
4
5
6
7
8
9
10
Note que la integración con preprocesadores podría variar en función de la cadena de herramientas. Echa un vistazo a las documentaciones correspondientes para ejemplos:
# Importaciones de Src
Si prefiere dividir sus componentes *.vue
en múltiples archivos, puede utilizar el atributo src
para importar un archivo externo para un bloque de lenguaje:
<template src="./template.html"></template>
<style src="./style.css"></style>
<script src="./script.js"></script>
2
3
Tenga en cuenta que las importaciones src
siguen las mismas reglas de resolución de ruta como las solicitudes de recursos webpack, lo que significa:
- las rutas relativas necesitan empezar con
./
- Puede importar recursos de las dependencias npm:
<!-- importar un archivo del paquete npm instalado "todomvc-app-css" -->
<style src="todomvc-app-css/index.css">
2
Las importaciones src
también funcionan con bloques personalizados, p. ej.:
<unit-test src="./unit-test.js">
</unit-test>
2
# Comentarios
Dentro de cada bloque debe utilizar la sintaxis de comentario del lenguaje utilizado (HTML, CSS, JavaScript, Pug, etc.). Para comentarios de nivel superior, utilice la sintaxis de comentarios de HTML: <!-- comment contents here -->