Nuxt Content 中如何正确获取当前页面的 slug 并用于 API 请求?
我在用 Nuxt 3 搭建一个博客,内容用的是 Nuxt Content。现在想在文章详情页里根据当前文章的 slug 去调用一个自定义 API 接口,但不确定怎么拿到这个 slug。试过从 useRoute() 里取 params.slug,但有时候是 undefined,特别是刷新页面后。
比如我的文件结构是 content/posts/hello-world.md,访问路径是 /posts/hello-world,这时候我希望拿到 hello-world 这个值传给后端。下面是我目前写的组件逻辑:
const route = useRoute()
const slug = route.params.slug
onMounted(() => {
fetch(<code>/api/stats?slug=${slug}</code>)
.then(res => res.json())
.then(data => console.log(data))
})
但经常拿不到正确的 slug,是不是应该用别的方法?比如从 document 里取?或者 Nuxt Content 提供了什么专用的 API?
首先别直接用
route.params.slug,这个值在组件加载初期可能还没准备好,特别是在页面刷新的时候。Nuxt 提供了一个更好的方式:useAsyncData或者useState配合useRoute来确保数据准备好了再处理。这里给你一个更可靠的写法:
这样做的好处是等 Nuxt Content 的数据加载完之后才发起请求,避免 undefined 的问题。注意这里用了
queryContent来获取内容信息,比直接从路由参数取要可靠得多。顺便说一句,别想着去 document 里取路径,那不是正经开发者的做法,太绕弯路了。用 Nuxt Content 提供的 API 更加优雅和稳定。