路由数据参考
Starlight 的路由数据对象包含有关当前页面的信息。在“路由数据”指南中了解有关 Starlight 数据模型工作原理的更多信息。
在 Astro 组件中,可以从 Astro.locals.starlightRoute
访问路由数据
---const { hasSidebar } = Astro.locals.starlightRoute;---
在路由中间件中,可以从传递给中间件函数的上下文对象中访问路由数据
import { defineRouteMiddleware } from '@astrojs/starlight/route-data';
export const onRequest = defineRouteMiddleware((context) => { const { hasSidebar } = context.locals.starlightRoute;});
starlightRoute
标题为“starlightRoute”的部分starlightRoute
对象具有以下属性
dir
标题为“dir”的部分类型: 'ltr' | 'rtl'
页面的书写方向。
lang
标题为“lang”的部分类型: string
此页面区域设置的 BCP-47 语言标签,例如 en
、zh-CN
或 pt-BR
。
locale
标题为“locale”的部分类型: string | undefined
提供某种语言的基础路径。对于根区域设置的 slug,该值为 undefined
。
siteTitle
标题为“siteTitle”的部分类型: string
此页面区域设置的网站标题。
siteTitleHref
标题为“siteTitleHref”的部分类型: string
网站标题的 href
属性值,链接回主页,例如 /
。对于多语言站点,这将包括当前区域设置,例如 /en/
或 /zh-cn/
。
slug
标题为“slug”的部分类型: string
此页面的 slug,由内容文件名生成。
此属性已弃用,并将在 Starlight 的未来版本中删除。请通过使用 Starlight 的 docsLoader
迁移到新的内容层 API,并改用 id
属性。
类型: string
此页面的 slug,或者如果使用 legacy.collections
标志,则为基于内容文件名的此页面的唯一 ID。
isFallback
标题为“isFallback”的部分类型: boolean | undefined
如果此页面在当前语言中未翻译,并使用默认区域设置的回退内容,则为 true
。仅在多语言站点中使用。
entryMeta
标题为“entryMeta”的部分类型: { dir: 'ltr' | 'rtl'; lang: string }
页面内容的区域设置元数据。当页面使用回退内容时,可以与顶层区域设置值不同。
entry
标题为“entry”的部分当前页面的 Astro 内容集合条目。包括当前页面在 entry.data
中的 frontmatter 值。
entry: { data: { title: string; description: string | undefined; // etc. }}
在 Astro 的 Collection Entry Type 参考中了解有关此对象形状的更多信息。
sidebar
标题为“sidebar”的部分类型: SidebarEntry[]
此页面的站点导航侧边栏条目。
hasSidebar
标题为“hasSidebar”的部分类型: boolean
是否应在此页面上显示侧边栏。
pagination
标题为“pagination”的部分类型: { prev?: Link; next?: Link }
如果启用,则链接到侧边栏中的上一页和下一页。
toc
标题为“toc”的部分类型: { minHeadingLevel: number; maxHeadingLevel: number; items: TocItem[] } | undefined
如果启用,则为该页面的目录。
headings
标题为“headings”的部分类型: { depth: number; slug: string; text: string }[]
从当前页面提取的所有 Markdown 标题的数组。如果你想构建一个遵循 Starlight 配置选项的目录组件,请改用 toc
。
lastUpdated
标题为“lastUpdated”的部分类型: Date | undefined
如果启用,则为表示此页面最后更新时间的 JavaScript Date
对象。
editUrl
标题为“editUrl”的部分类型: URL | undefined
如果启用,则为可以编辑此页面的地址的 URL
对象。
head
标题为“head”的部分类型: HeadConfig[]
要包含在当前页面的 <head>
中的所有标签的数组。包括 <title>
和 <meta charset="utf-8">
等重要标签。
实用工具
标题为“实用工具”的部分defineRouteMiddleware()
标题为“defineRouteMiddleware()”的部分使用 defineRouteMiddleware()
实用工具来帮助为你的路由中间件模块提供类型支持
import { defineRouteMiddleware } from '@astrojs/starlight/route-data';
export const onRequest = defineRouteMiddleware((context) => { // ...});
StarlightRouteData
类型
标题为“StarlightRouteData 类型”的部分如果你正在编写需要使用 Starlight 路由数据的代码,可以导入 StarlightRouteData
类型以匹配 Astro.locals.starlightRoute
的形状。
在下面的示例中,一个 usePageTitleInTOC()
函数会更新路由数据,使用当前页面的标题作为目录中第一项的标签,替换默认的“概述”标签。StarlightRouteData
类型允许你检查路由数据的更改是否有效。
import type { StarlightRouteData } from '@astrojs/starlight/route-data';
export function usePageTitleInTOC(starlightRoute: StarlightRouteData) { const overviewLink = starlightRoute.toc?.items[0]; if (overviewLink) { overviewLink.text = starlightRoute.entry.data.title; }}
然后可以从路由中间件中调用此函数
import { defineRouteMiddleware } from '@astrojs/starlight/route-data';import { usePageTitleInTOC } from './route-utils';
export const onRequest = defineRouteMiddleware((context) => { usePageTitleInTOC(context.locals.starlightRoute);});