# Especificação da Sintaxe SFC
# Introdução
Um arquivo *.vue
é um formato de arquivo personalizado que usa sintaxe semelhante a HTML para descrever um componente Vue. Cada arquivo *.vue
consiste em três tipos de blocos de linguagem no nível superior: <template>
, <script>
e <style>
e, opcionalmente, blocos customizados adicionais:
<template>
<div class="example">{{ msg }}</div>
</template>
<script>
export default {
data() {
return {
msg: 'Olá mundo!'
}
}
}
</script>
<style>
.example {
color: red;
}
</style>
<custom1>
Isso poderia ser, ex.: documentação do componente.
</custom1>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Blocos de Linguagem
# <template>
Cada arquivo
*.vue
pode conter no máximo um bloco<template>
de nível superior por vez.O conteúdo será extraído e passado para
@vue/compiler-dom
, pré-compilado em funções de renderização JavaScript e anexado ao componente exportado como sua opçãorender
.
# <script>
Cada arquivo
*.vue
pode conter no máximo um bloco<script>
por vez (excluindo<script setup>
).O script é executado como um Módulo ES.
A exportação padrão deve ser um objeto de opções do componente Vue, como um objeto simples ou como o valor de retorno de defineComponent.
# <script setup>
Cada arquivo
*.vue
pode conter no máximo um bloco<script setup>
por vez (excluindo o<script>
normal).O script é pré-processado e usado como a função
setup()
do componente, o que significa que será executado para cada instância do componente. Os vínculos de nível superior em<script setup>
são automaticamente expostos ao template. Para mais detalhes, veja documentação dedicada ao<script setup>
.
# <style>
Um único arquivo
*.vue
pode conter várias tags<style>
.Uma tag
<style>
pode ter atributosscoped
oumodule
(veja Recursos de Estilo em SFC para mais detalhes) para ajudar a encapsular os estilos no componente atual. Várias tags<style>
com diferentes modos de encapsulamento podem ser misturadas no mesmo componente.
# Blocos Customizados
Blocos customizados adicionais podem ser incluídos em um arquivo *.vue
para qualquer necessidade específica do projeto, por exemplo, um bloco <docs>
. Alguns exemplos do mundo real de blocos customizados incluem:
- Gridsome:
<page-query>
(opens new window) - vite-plugin-vue-gql:
<gql>
(opens new window) - vue-i18n:
<i18n>
(opens new window)
O manuseio de Blocos Customizados dependerá das ferramentas - se você quiser criar suas próprias integrações de blocos customizados, consulte Ferramentas para SFC para obter mais detalhes.
# Inferência Automática de nome
Um SFC infere automaticamente o nome do componente pelo seu nome do arquivo nos seguintes casos:
- Formatação de aviso do desenvolvedor
- Inspeção no DevTools
- Auto-referência recursiva. Por exemplo. um arquivo chamado
FooBar.vue
pode se referir a si mesmo como<FooBar/>
em seu template. Isso tem prioridade menor do que componentes explicitamente registrados/importados.
# Pré-Processadores
Os blocos podem declarar linguagens de pré-processador usando o atributo lang
. O caso mais comum é usar TypeScript para o bloco <script>
:
<script lang="ts">
// usa TypeScript
</script>
2
3
lang
pode ser aplicado a qualquer bloco - por exemplo, podemos usar <style>
com SASS (opens new window) e <template>
com 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
Observe que a integração com pré-processadores pode diferir com base na cadeia de ferramentas. Confira as respectivas documentações para exemplos:
# Importações Src
Se preferir dividir seus componentes *.vue
em vários arquivos, você pode usar o atributo src
para importar um arquivo externo para um bloco de languagem:
<template src="./template.html"></template>
<style src="./style.css"></style>
<script src="./script.js"></script>
2
3
Esteja ciente de que as importações src
seguem as mesmas regras de resolução de caminho que as solicitações do módulo webpack, o que significa:
- Caminhos relativos precisam começar com
./
- Você pode importar recursos das dependências npm:
<!-- importar um arquivo do pacote npm "todomvc-app-css" instalado -->
<style src="todomvc-app-css/index.css">
2
Importações src
também funcionam com blocos customizados, por exemplo:
<unit-test src="./unit-test.js">
</unit-test>
2
# Comentários
Dentro de cada bloco deve-se utilizar a sintaxe de comentários da linguagem utilizada (HTML, CSS, JavaScript, Pug, etc.). Para comentários de nível superior, use a sintaxe de comentário HTML: <!-- comente o conteúdo aqui -->