Макеты

Исходники
Утилиты 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. Объект может содержать:

СвойствоТипОбязательныйОписание
srcstringнетПуть к шаблону. Если не задан — нужен getContents.
filenamestringнетИмя файла шаблона. По умолчанию из src (тогда src обязателен).
dststringнетПуть к целевому файлу. По умолчанию из filename и buildDir.
optionsRecord<string, any>нетДанные для шаблона.
getContents(data) => string | Promise<string>нетФункция, возвращающая содержимое. При заданном src не используется.
writebooleanнет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.