nuxt logo

문서 번역(비공식)

레이아웃

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로 설정한 템플릿 객체로 변환됩니다. 템플릿 객체가 제공되면, 다음 속성을 가져야 합니다:

속성타입필수 여부설명
srcstringfalse템플릿 경로. src가 제공되지 않으면, 대신 getContents가 제공되어야 합니다.
filenamestringfalse템플릿의 파일명. filename이 제공되지 않으면, src 경로에서 생성됩니다. 이 경우, src 옵션이 필요합니다.
dststringfalse대상 파일 경로. dst가 제공되지 않으면, filename 경로와 nuxt buildDir 옵션에서 생성됩니다.
optionsRecord<string, any>false템플릿에 전달할 옵션.
getContents(data) => string | Promise<string>falseoptions 객체와 함께 호출되는 함수. 문자열 또는 문자열로 해결되는 프라미스를 반환해야 합니다. src가 제공되면, 이 함수는 무시됩니다.
writebooleanfalsetrue로 설정하면, 템플릿이 대상 파일에 작성됩니다. 그렇지 않으면, 템플릿은 가상 파일 시스템에서만 사용됩니다.

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')
  },
})

그런 다음 페이지에서 이 레이아웃을 사용할 수 있습니다:

pages/about.vue
<script setup lang="ts">
definePageMeta({
  layout: 'custom',
})
</script>

<template>
  <div>About Page</div>
</template>

@vitejs/plugin-vue가 가상 .vue 파일을 지원하지 않기 때문에, addLayout의 첫 번째 인수에 write: true를 전달하여 이 제한을 우회할 수 있습니다.