我使用的是Nuxt.js,并且有一个动态页面,定义如下
pages/post/_slug.vue
那么,当我访问页面url时,比如http://localhost:3000/post/hello-world,我如何读取页面中的slug参数值呢?
目前,我正在使用asyncData获取它,如下所示:
asyncData ({ params }) {
// called every time before loading the component
return {
slug: params.slug
}
}
这是工作正常,但我认为这不是最好的方法,应该有一个更好的方法,使参数可用于页面。任何帮助都是感谢!
9条答案
按热度按时间mfuanj7w1#
注:此答案适用于Vue2和Nuxt2。如果您正在查找Nuxt3或Vue3的答案,请参阅其他答案。
在.vue文件中,要获取Vue路由器路由对象:
(注意Vue路由器位于
this.$router
对象下)$route
对象具有一些有用的属性:可以按如下方式使用
$route
对象:url路径参数在
route.params
下,如您的route.params.slug
Vue挂接钩子只在客户端运行,当你想获取服务器端的参数时,可以使用asyncData方法:
但是,请注意:
它将在服务器端调用一次(在第一次向Nuxt应用发出请求时),并在导航到其他路线时调用客户端。ref
如果你不需要服务器上的参数信息,比如你不需要根据服务器端的参数获取数据,我认为挂载的钩子就足够了。
iezvtpos2#
要从URL读取参数,您应该在Nuxt中使用以下方法:
第一个月
例如
网址:
https://example.com/example/?token=QWERTYUASDFGH
通过这行代码,您可以读取
token
:this.$route.query.token
给予
QWERTYUASDFGH
。iq0todco3#
只需访问路由参数
供全球使用,但不是良好做法:
窗口.$nuxt._路由.参数
对于页面/组件/布局等下的本地使用,我们应该始终按照以下方式进行练习
此.$路由
或
此.$nuxt._路由.参数
iklwldmw4#
如果您在存储上下文中(例如actions.js),则可以像这样访问查询参数:
esbemjvw5#
如果您想在
apollo
智能查询中访问路由信息,其他答案基本上就足够了:ngynwnxp6#
随着Nuxt3稳定版本的发布,我想使用组合API更新答案。
这就是在任何
.vue
文件中访问当前路径的所有感兴趣部分的方法route
在转到http://localhost:5678/about?fruit=watermelon
时获取以下内容如果使用Vue devtools,还可以单击组件并通过控制台查找示例(如果希望快速检查对象,这很有用),它比
Routes
选项卡提供了更多的细节。更多信息请访问:https://v3.nuxtjs.org/api/composables/use-route#useroute
使用Options API时,它将如下所示(如在控制台中)
附言:也许有一个更短的方法,我还不知道。
PS2:我总是在
query params
和"route params"
之间混淆,因此this memento的区别可能是有用的。zynd9foi7#
据我所知,这已经是最好的方法,如果不是唯一的方法的话。但我可以建议一个稍微不同的方法,也许适合您的需要。使用
asyncData
方法从服务器检索数据,而不是把一个参数放在您的虚拟机和处理后,如果是你的情况。然后,您可以在表示逻辑上处理结果数据,而不是任何类型的 * 请求 *。另一方面,如果您不想向VM传递任何内容,也可以使用fetch,或者根据需要使用中间件。6ovsh4lw8#
对我来说最好的办法是:
ssgvzors9#
正在声明动态路由
在nuxt2中,下划线
_
用于动态路由,在nuxt3中,动态路由现在使用方括号[]
代替下划线_
访问参数
在nuxt2中,可以在
$route
对象上访问路由参数例如
this.$route.params
在nuxt3中,参数可以从
useRoute
组合例如
const { params } = useRoute()