layouts
Nuxt proporciona un marco de layouts para extraer patrones comunes de UI en layouts reutilizables.
Para un mejor rendimiento, los componentes colocados en este directorio se cargarán automáticamente mediante importación asíncrona cuando se utilicen.
Habilitar Layouts
Los layouts se habilitan añadiendo <NuxtLayout>
a tu app.vue
:
<template>
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
Para usar un layout:
- Establece una propiedad
layout
en tu página con definePageMeta. - Establece la propiedad
name
de<NuxtLayout>
.
El nombre del layout se normaliza a kebab-case, por lo que someLayout
se convierte en some-layout
.
Si no se especifica un layout, se usará layouts/default.vue
.
Si solo tienes un único layout en tu aplicación, recomendamos usar app.vue
en su lugar.
A diferencia de otros componentes, tus layouts deben tener un único elemento raíz para permitir que Nuxt aplique transiciones entre cambios de layout, y este elemento raíz no puede ser un <slot />
.
Layout Predeterminado
Añade un ~/layouts/default.vue
:
<template>
<div>
<p>Algún contenido de layout predeterminado compartido en todas las páginas</p>
<slot />
</div>
</template>
En un archivo de layout, el contenido de la página se mostrará en el componente <slot />
.
Layout Nombrado
-| layouts/
---| default.vue
---| custom.vue
Luego puedes usar el layout custom
en tu página:
definePageMeta({
layout: 'custom'
})
Puedes sobrescribir directamente el layout predeterminado para todas las páginas usando la propiedad name
de <NuxtLayout>
:
<script setup lang="ts">
// Puedes elegir esto basado en una llamada a la API o el estado de inicio de sesión
const layout = "custom";
</script>
<template>
<NuxtLayout :name="layout">
<NuxtPage />
</NuxtLayout>
</template>
Si tienes un layout en directorios anidados, el nombre del layout se basará en su propio directorio de ruta y nombre de archivo, eliminando los segmentos duplicados.
Archivo | Nombre del Layout |
---|---|
~/layouts/desktop/default.vue | desktop-default |
~/layouts/desktop-base/base.vue | desktop-base |
~/layouts/desktop/index.vue | desktop |
Para mayor claridad, recomendamos que el nombre del archivo del layout coincida con su nombre:
Archivo | Nombre del Layout |
---|---|
~/layouts/desktop/DesktopDefault.vue | desktop-default |
~/layouts/desktop-base/DesktopBase.vue | desktop-base |
~/layouts/desktop/Desktop.vue | desktop |
Cambiar el Layout Dinámicamente
También puedes usar el helper setPageLayout
para cambiar el layout dinámicamente:
<script setup lang="ts">
function enableCustomLayout () {
setPageLayout('custom')
}
definePageMeta({
layout: false,
});
</script>
<template>
<div>
<button @click="enableCustomLayout">Actualizar layout</button>
</div>
</template>
Sobrescribir un Layout por Página
Si estás usando páginas, puedes tomar el control total estableciendo layout: false
y luego usando el componente <NuxtLayout>
dentro de la página.
<script setup lang="ts">
definePageMeta({
layout: false,
})
</script>
<template>
<div>
<NuxtLayout name="custom">
<template #header> Algún contenido de plantilla de encabezado. </template>
El resto de la página
</NuxtLayout>
</div>
</template>
Si usas <NuxtLayout>
dentro de tus páginas, asegúrate de que no sea el elemento raíz (o desactiva las transiciones de layout/página).
※Esta página es una traducción no oficial de la documentación oficial de Nuxt.js.
La página correspondiente en la documentación oficial está aquí:
https://nuxt.com/docs/3.x/guide/directory-structure/layouts