PageLinksPRO
用法
链接
使用 links
prop,它是一个包含以下属性的对象数组
label: string
icon?: string
您可以传递来自 Link 组件的任何属性,例如 to
、target
等。
<script setup lang="ts">
import type { PageLink } from '@nuxt/ui-pro'
const links = ref<PageLink[]>([
{
label: 'Edit this page',
icon: 'i-lucide-file-pen',
to: 'https://github.com/nuxt/ui-pro/tree/v3/docs/content/3.components/page-links.md'
},
{
label: 'Star on GitHub',
icon: 'i-lucide-star',
to: 'https://github.com/nuxt/ui'
},
{
label: 'Roadmap',
icon: 'i-lucide-map',
to: '/roadmap'
}
])
</script>
<template>
<UPageLinks :links="links" />
</template>
标题
使用 title
prop 在链接上方显示标题。
<script setup lang="ts">
import type { PageLink } from '@nuxt/ui-pro'
const links = ref<PageLink[]>([
{
label: 'Edit this page',
icon: 'i-lucide-file-pen',
to: 'https://github.com/nuxt/ui-pro/tree/v3/docs/content/3.components/page-links.md'
},
{
label: 'Star on GitHub',
icon: 'i-lucide-star',
to: 'https://github.com/nuxt/ui'
},
{
label: 'Roadmap',
icon: 'i-lucide-map',
to: '/roadmap'
}
])
</script>
<template>
<UPageLinks title="Community" :links="links" />
</template>
示例
在页面内
在 ContentToc 组件的 bottom
slot 中使用 PageLinks 组件,以在目录下方显示链接列表。
<script setup lang="ts">
import type { PageLink } from '@nuxt/ui-pro'
const route = useRoute()
definePageMeta({
layout: 'docs'
})
const { data: page } = await useAsyncData(route.path, () => {
return queryCollection('content').path(route.path).first()
})
const { data: surround } = await useAsyncData(`${route.path}-surround`, () => {
return queryCollectionItemSurroundings('content', route.path)
})
const links = computed<PageLink[]>(() => [{
icon: 'i-lucide-file-pen',
label: 'Edit this page',
to: `https://github.com/nuxt/ui/edit/v3/docs/content/${page?.value?.stem}.md`,
target: '_blank'
}, {
icon: 'i-lucide-star',
label: 'Star on GitHub',
to: 'https://github.com/nuxt/ui',
target: '_blank'
}, {
label: 'Roadmap',
icon: 'i-lucide-map',
to: '/roadmap'
}])
</script>
<template>
<UPage>
<UPageHeader :title="page.title" :description="page.description" />
<UPageBody>
<ContentRenderer :value="page" />
<USeparator />
<UContentSurround :surround="surround" />
</UPageBody>
<template #right>
<UContentToc :links="page.body.toc.links">
<template #bottom>
<USeparator type="dashed" />
<UPageLinks title="Community" :links="links" />
</template>
</UContentToc>
</template>
</UPage>
</template>
API
Props
Prop | 默认值 | 类型 |
---|---|---|
as |
|
此组件应渲染为的元素或组件。 |
title |
| |
links |
| |
ui |
|
插槽
插槽 | 类型 |
---|---|
title |
|
link |
|
link-leading |
|
link-label |
|
link-trailing |
|
主题
export default defineAppConfig({
uiPro: {
pageLinks: {
slots: {
root: 'flex flex-col gap-3',
title: 'text-sm font-semibold flex items-center gap-1.5',
list: 'flex flex-col gap-2',
item: 'relative',
link: 'group text-sm flex items-center gap-1.5 focus-visible:outline-primary',
linkLeadingIcon: 'size-5 shrink-0',
linkLabel: 'truncate',
linkLabelExternalIcon: 'size-3 absolute top-0 text-dimmed'
},
variants: {
active: {
true: {
link: 'text-primary font-medium'
},
false: {
link: [
'text-muted hover:text-default',
'transition-colors'
]
}
}
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
uiPro: {
pageLinks: {
slots: {
root: 'flex flex-col gap-3',
title: 'text-sm font-semibold flex items-center gap-1.5',
list: 'flex flex-col gap-2',
item: 'relative',
link: 'group text-sm flex items-center gap-1.5 focus-visible:outline-primary',
linkLeadingIcon: 'size-5 shrink-0',
linkLabel: 'truncate',
linkLabelExternalIcon: 'size-3 absolute top-0 text-dimmed'
},
variants: {
active: {
true: {
link: 'text-primary font-medium'
},
false: {
link: [
'text-muted hover:text-default',
'transition-colors'
]
}
}
}
}
}
})
]
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import uiPro from '@nuxt/ui-pro/vite'
export default defineConfig({
plugins: [
vue(),
uiPro({
uiPro: {
pageLinks: {
slots: {
root: 'flex flex-col gap-3',
title: 'text-sm font-semibold flex items-center gap-1.5',
list: 'flex flex-col gap-2',
item: 'relative',
link: 'group text-sm flex items-center gap-1.5 focus-visible:outline-primary',
linkLeadingIcon: 'size-5 shrink-0',
linkLabel: 'truncate',
linkLabelExternalIcon: 'size-3 absolute top-0 text-dimmed'
},
variants: {
active: {
true: {
link: 'text-primary font-medium'
},
false: {
link: [
'text-muted hover:text-default',
'transition-colors'
]
}
}
}
}
}
})
]
})