<NuxtLayout>
Вы можете использовать компонент <NuxtLayout />, чтобы активировать лейаут default в app.vue или error.vue.
<template>
<NuxtLayout>
некоторое содержимое страницы
</NuxtLayout>
</template>
Входные параметры
name: Укажите имя лейаута, который будет отображаться, это может быть строка, реактивная ссылка или вычисляемое свойство. Оно должно совпадать с именем соответствующего файла лейаута в директорииlayouts/.- тип:
string - по умолчанию:
default
- тип:
<script setup lang="ts">
// пример: layouts/custom.vue
const layout = 'custom'
</script>
<template>
<NuxtLayout :name="layout">
<NuxtPage />
</NuxtLayout>
</template>
errorLayout.vue, он станет error-layout при передаче в качестве свойства name в <NuxtLayout />.<template>
<NuxtLayout name="error-layout">
<NuxtPage />
</NuxtLayout>
</template>
fallback: Если во входной параметрnameпередан недействительный лейаут, то он не будет отрендерен. Укажите лейаутfallback, который будет отображаться в таком случае. Он должен совпадать с именем соответствующего файла лейаута в директорииlayouts/.- тип:
string - по умолчанию:
null
- тип:
Дополнительные входные параметры
NuxtLayout также принимает любые дополнительные входные параметры, которые могут потребоваться для передачи в лейаут. Затем эти пользовательские входные параметры доступны в виде атрибутов.
<template>
<div>
<NuxtLayout
name="custom"
title="Я - пользовательский лейаут"
>
<!-- ... -->
</NuxtLayout>
</div>
</template>
В приведённом выше примере значение title будет доступно через $attrs.title в разметке <template> или через useAttrs().title в <script setup> в custom.vue.
<script setup lang="ts">
const layoutCustomProps = useAttrs()
console.log(layoutCustomProps.title) // Я - пользовательский лейаут
</script>
Переходы
<NuxtLayout /> рендерит входящий контент через <slot />, который затем оборачивается компонентом Vue <Transition />, чтобы включить переход смены лейаута. Чтобы это работало корректно, <NuxtLayout /> не должен быть корневым элементом компонента страницы.
<template>
<div>
<NuxtLayout name="custom">
<template #header>
Некоторое содержимое шаблона хедера.
</template>
</NuxtLayout>
</div>
</template>
<template>
<div>
<!-- именованный слот -->
<slot name="header" />
<slot />
</div>
</template>
Ссылка на лейаут
Чтобы получить ссылку на компонент лейаута, используйте ref.value.layoutRef.
<script setup lang="ts">
const layout = ref()
function logFoo () {
layout.value.layoutRef.foo()
}
</script>
<template>
<NuxtLayout ref="layout">
лейаут по умолчанию
</NuxtLayout>
</template>
<script setup lang="ts">
const foo = () => console.log('foo')
defineExpose({
foo,
})
</script>
<template>
<div>
лейаут по умолчанию
<slot />
</div>
</template>