Nuxt UI v3-alpha 已发布!

试用

页面

为您的页面提供动态网格布局。

用法

Page 组件允许您将页面结构化为带有左侧或右侧列的网格。如果没有提供插槽,页面将为单列。

<template>
  <UPage>
    <template #left>
      <!-- <UAside /> -->
    </template>

    <template #right>
      <!-- <UContentToc /> -->
    </template>
  </UPage>
</template>

您通常会在布局或父 .vue 页面及其 #left 插槽中使用此组件

pages/docs.vue
<script setup lang="ts">
import type { NavItem } from '@nuxt/content'

const navigation = inject<Ref<NavItem[]>>('navigation', ref([]))
</script>

<template>
  <UContainer>
    <UPage>
      <template #left>
        <UAside>
          <UNavigationTree :links="mapContentNavigation(navigation)" />
        </UAside>
      </template>

      <!-- Change this to `<slot />` when in a layout. -->
      <NuxtPage />
    </UPage>
  </UContainer>
</template>

但您也可以在 [...slug].vue 页面及其 #right 插槽中使用它

pages/[...slug].vue
<script setup lang="ts">
const route = useRoute()

const { data: page } = await useAsyncData(route.path, () => queryContent(route.path).findOne())
</script>

<template>
  <UPage>
    <UPageHeader :title="page.title" :description="page.description" :links="page.links" />

    <UPageBody prose>
      <ContentRenderer v-if="page.body" :value="page" />
    </UPageBody>

    <template #right>
      <UContentToc :links="page.body.toc.links" />
    </template>
  </UPage>
</template>

插槽

left
{}
right
{}
default
{}

属性

ui
DeepPartial<{ wrapper: string; left: string; center: { narrow: string; base: string; full: string; }; right: string; }>
{}

配置

{
  wrapper: 'flex flex-col lg:grid lg:grid-cols-10 lg:gap-8',
  left: 'lg:col-span-2',
  center: {
    narrow: 'lg:col-span-6',
    base: 'lg:col-span-8',
    full: 'lg:col-span-10'
  },
  right: 'lg:col-span-2 order-first lg:order-last'
}