Макеты
Утилиты Nuxt Kit для работы с макетами.
Макеты — обёртка вокруг страниц с общими элементами (шапка, подвал и т.д.). Регистрация через утилиту addLayout.
addLayout
Регистрирует шаблон как макет и добавляет его в список макетов.
В Nuxt 2 макет
error тоже регистрировался через эту утилиту. В Nuxt 3+ макет ошибки заменён на страницу error.vue в корне проекта.Использование
import { addLayout, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
setup () {
const { resolve } = createResolver(import.meta.url)
addLayout({
src: resolve('templates/custom-layout.ts'),
filename: 'custom-layout.ts',
}, 'custom')
},
})
Тип
function addLayout (layout: NuxtTemplate | string, name: string): void
Параметры
layout: объект шаблона или строка с путём. Строка преобразуется в объект с полем src. Объект может содержать:
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
src | string | нет | Путь к шаблону. Если не задан — нужен getContents. |
filename | string | нет | Имя файла шаблона. По умолчанию из src (тогда src обязателен). |
dst | string | нет | Путь к целевому файлу. По умолчанию из filename и buildDir. |
options | Record<string, any> | нет | Данные для шаблона. |
getContents | (data) => string | Promise<string> | нет | Функция, возвращающая содержимое. При заданном src не используется. |
write | boolean | нет | true — записать в файл; иначе только в виртуальную ФС. |
name: имя макета при регистрации (например default, custom).
Пример
Регистрация макета custom с шапкой и подвалом:
import { addLayout, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
setup () {
addLayout({
write: true,
filename: 'my-layout.vue',
getContents: () => `<template>
<div>
<header>My Header</header>
<slot />
<footer>My Footer</footer>
</div>
</template>`,
}, 'custom')
},
})
Использование макета на странице:
app/pages/about.vue
<script setup lang="ts">
definePageMeta({
layout: 'custom',
})
</script>
<template>
<div>About Page</div>
</template>
@vitejs/plugin-vue не поддерживает виртуальные .vue файлы — передайте write: true в первом аргументе addLayout.