nuxt logo

Tradução da Documentação (Não Oficial)

layouts

O Nuxt fornece um framework de layouts para extrair padrões comuns de UI em layouts reutilizáveis.

Para melhor desempenho, os componentes colocados neste diretório serão carregados automaticamente via importação assíncrona quando usados.

Habilitar Layouts

Os layouts são habilitados adicionando <NuxtLayout> ao seu app.vue:

app.vue
<template>
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>

Para usar um layout:

  • Defina uma propriedade layout na sua página com definePageMeta.
  • Defina a propriedade name de <NuxtLayout>.

O nome do layout é normalizado para kebab-case, então someLayout se torna some-layout.

Se nenhum layout for especificado, layouts/default.vue será usado.

Se você tiver apenas um layout em sua aplicação, recomendamos usar app.vue em vez disso.

Ao contrário de outros componentes, seus layouts devem ter um único elemento raiz para permitir que o Nuxt aplique transições entre mudanças de layout - e este elemento raiz não pode ser um <slot />.

Layout Padrão

Adicione um ~/layouts/default.vue:

layouts/default.vue
<template>
  <div>
    <p>Algum conteúdo de layout padrão compartilhado em todas as páginas</p>
    <slot />
  </div>
</template>

Em um arquivo de layout, o conteúdo da página será exibido no componente <slot />.

Layout Nomeado

Estrutura de Diretórios
-| layouts/
---| default.vue
---| custom.vue

Então você pode usar o layout custom na sua página:

pages/about.vue
definePageMeta({
  layout: 'custom'
})
Veja também guide > directory-structure > pages#page-metadata

Você pode substituir diretamente o layout padrão para todas as páginas usando a propriedade name de <NuxtLayout>:

app.vue
<script setup lang="ts">
// Você pode escolher isso com base em uma chamada de API ou status de login
const layout = "custom";
</script>

<template>
  <NuxtLayout :name="layout">
    <NuxtPage />
  </NuxtLayout>
</template>

Se você tiver um layout em diretórios aninhados, o nome do layout será baseado em seu próprio diretório de caminho e nome de arquivo, com segmentos duplicados sendo removidos.

ArquivoNome do Layout
~/layouts/desktop/default.vuedesktop-default
~/layouts/desktop-base/base.vuedesktop-base
~/layouts/desktop/index.vuedesktop

Para clareza, recomendamos que o nome do arquivo do layout corresponda ao seu nome:

ArquivoNome do Layout
~/layouts/desktop/DesktopDefault.vuedesktop-default
~/layouts/desktop-base/DesktopBase.vuedesktop-base
~/layouts/desktop/Desktop.vuedesktop
Editar e visualizar o código de exemploexamples > features > layouts

Alterando o Layout Dinamicamente

Você também pode usar o auxiliar setPageLayout para alterar o layout dinamicamente:

<script setup lang="ts">
function enableCustomLayout () {
  setPageLayout('custom')
}
definePageMeta({
  layout: false,
});
</script>

<template>
  <div>
    <button @click="enableCustomLayout">Atualizar layout</button>
  </div>
</template>
Editar e visualizar o código de exemploexamples > features > layouts

Substituindo um Layout em Base por Página

Se você estiver usando páginas, pode ter controle total definindo layout: false e, em seguida, usando o componente <NuxtLayout> dentro da página.

<script setup lang="ts">
definePageMeta({
  layout: false,
})
</script>

<template>
  <div>
    <NuxtLayout name="custom">
      <template #header> Algum conteúdo de template de cabeçalho. </template>

      O resto da página
    </NuxtLayout>
  </div>
</template>

Se você usar <NuxtLayout> dentro de suas páginas, certifique-se de que não seja o elemento raiz (ou desative transições de layout/página).