レイアウト
Nuxt Kitは、レイアウトを扱うためのユーティリティセットを提供します。
レイアウトは、ページのラッパーとして使用されます。たとえば、ヘッダーとフッターなどの共通コンポーネントでページをラップするために使用できます。レイアウトは、addLayoutユーティリティを使用して登録できます。
addLayout
テンプレートをレイアウトとして登録し、レイアウトに追加します。
使用方法
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 | 文字列 | false | テンプレートへのパス。srcが指定されていない場合は、代わりにgetContentsが指定されている必要があります。 |
filename | 文字列 | false | テンプレートのファイル名。filenameが指定されていない場合、srcパスから生成されます。この場合、srcオプションは必須です。 |
dst | 文字列 | false | 宛先ファイルへのパス。dstが指定されていない場合、filenameパスとNuxtのbuildDirオプションから生成されます。 |
options | Record<string, any> | false | テンプレートに渡すオプション。 |
getContents | (data) => string | Promise<string> | false | optionsオブジェクトを引数として呼び出される関数です。文字列、または文字列に解決されるPromiseを返す必要があります。srcが指定されている場合、この関数は無視されます。 |
write | ブール値 | false | 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ファイルのサポートが不足しているため、addLayoutの最初の引数にwrite: trueを渡すことで、この制限を回避できます。