You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在vue-router中配置可选路由?含router-link场景示例

这事儿好办,只需要把路由参数设置为可选的就能同时支持两种路径了,具体步骤如下:

解决方法

1. 修改路由配置

在你的route.js里,把路由的path改成带可选参数的格式——在参数名后面加?,就表示这个参数是可选的:

// route.js
{
  path: 'foo/bar/:id?', // ? 标记让 id 参数变为可选
  component: fooComponent()
}

这样配置后,/foo/bar(不带参数)和/foo/bar/1(带id参数)都会匹配到这个路由。

你现有的router-link写法完全没问题:

<router-link :to="{path: '/foo/bar', params: {id: 1}}">跳转</router-link>

当你传入params.id时,Vue Router会自动拼接出/foo/bar/1的路径;如果想要跳转到不带参数的/foo/bar,只需要去掉params或者把id设为undefined即可:

// 直接跳转到无参数路径
<router-link :to="{path: '/foo/bar'}">跳转</router-link>
// 或者显式设置id为undefined
<router-link :to="{path: '/foo/bar', params: {id: undefined}}">跳转</router-link>

3. 组件内获取参数

因为id是可选参数,在fooComponent里获取时要注意它可能为undefined:

// 组件内部示例
mounted() {
  const id = this.$route.params.id;
  if (id) {
    // 处理带id的业务逻辑
  } else {
    // 处理无id的业务逻辑
  }
}

如果想让组件和路由解耦(更推荐的写法),可以开启路由的props选项:

// route.js
{
  path: 'foo/bar/:id?',
  component: fooComponent(),
  props: true // 自动将路由参数作为props传递给组件
}

然后在组件里定义props接收:

<script>
export default {
  props: {
    id: {
      type: String, // 路由参数默认是字符串,需要数字的话可以自行转换
      default: null
    }
  },
  mounted() {
    if (this.id) {
      // 处理带id的逻辑
    }
  }
}
</script>

内容的提问来源于stack exchange,提问作者hidar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:17:30