无法使用 Vue-Router 获取 URL 中的参数

Posted

技术标签:

【中文标题】无法使用 Vue-Router 获取 URL 中的参数【英文标题】:Cannot use Vue-Router to get the parameters in the URL 【发布时间】:2021-09-29 15:39:27 【问题描述】:

今天尝试使用Vue-Router(在Vue-CLI中)获取URL参数时遇到困难($route.query为空),代码如下。

代码用途:获取URL后面携带的参数(如“http://localhost:8080/#/?client_id=00000000000077”中的client_id)

项目文件结构:

路由器/index.js:

App.vue(获取URL参数部分代码):

这部分代码的运行结果:

【问题讨论】:

【参考方案1】:

我不确定为什么 $router.currentRoute$route 不匹配,但如果您需要在 mounted() 中使用 $router.currentRoute.query.client_id,您可以简单地使用它。

另一种解决方法是在$route.query.client_id 上使用$watch

export default 
  mounted() 
    const unwatch = this.$watch('$route.query.client_id', clientId => 
      console.log( clientId )

      // no need to continue watching
      unwatch()
    )
  

或组合 API 中的 watch

import  watch  from 'vue'
import  useRoute  from 'vue-router'

export default 
  mounted() 
    console.log(
      route: this.$route,
      router: this.$router,
    )
  ,
  setup() 
    const route = useRoute()

    const unwatch = watch(() => route.query.client_id, clientId => 
      console.log( clientId )

      // no need to continue watching
      unwatch()
    )
  

【讨论】:

以上是关于无法使用 Vue-Router 获取 URL 中的参数的主要内容,如果未能解决你的问题,请参考以下文章

无法使用vue-router从root Vue实例获取数据

按名称和参数获取 vue-router 的路由

vue-router 中的路径异步获取时导致的to报错问题

vue routes url不存在怎么跳指定的页面

解决vue-router嵌套路由(子路由)在history模式下刷新无法渲染页面的问题

vue 组件无法从 vue-router 获取 this.$router