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

Vue-router+Vuetify:如何在data对象中正确使用命名路由?

解决Vuetify导航项全部激活的命名路由问题

我之前也碰到过一模一样的情况,这其实是Vuetify的<v-list-item>在混合使用路径字符串和命名路由对象时,激活状态匹配逻辑出现的小bug。下面是具体的排查和解决步骤:

1. 统一所有导航项的to格式

首先要确保你的items数组里,所有导航项的to都完全使用命名路由对象的形式,绝对不要混合路径字符串和命名路由对象。比如之前如果有项是to: '/some-path',现在要改成对应的{name: 'your-route-name'}格式。

举个符合要求的items示例:

data() {
  return {
    items: [
      {
        title: 'Dashboard',
        to: { name: 'dashboard' } // 纯命名路由对象
      },
      {
        title: 'Locations',
        children: [
          {
            title: 'Location 1',
            to: { name: 'location.show', params: { id: 1 } }
          }
        ]
      }
      // 其他所有项都统一用命名路由对象
    ]
  }
}

混合格式会让Vuetify的激活匹配逻辑混乱,进而导致所有项被误标记为active。

2. 手动控制激活状态(可选但更可靠)

如果统一格式后还是有问题,可以直接手动绑定:active属性来精确控制激活状态,通过对比当前路由的name和导航项的to.name来判断:

<v-list-item
  v-for="item in items"
  :key="item.title"
  :to="item.to"
  :active="$route.name === item.to.name"
>
  <v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>

对于带有子项的<v-list-group>,可以通过检查子项中是否有匹配当前路由的项,来控制组的激活状态:

<v-list-group
  v-for="group in items"
  :key="group.title"
  :active="group.children.some(child => $route.name === child.to.name)"
>
  <template v-slot:activator>
    <v-list-item-title>{{ group.title }}</v-list-item-title>
  </template>
  <v-list-item
    v-for="child in group.children"
    :key="child.title"
    :to="child.to"
    :active="$route.name === child.to.name"
  >
    <v-list-item-title>{{ child.title }}</v-list-item-title>
  </v-list-item>
</v-list-group>

3. 确认路由名称的唯一性

最后检查一下所有路由配置的name是否唯一,重复的路由名称也会导致匹配错误。从你给出的代码来看,dashboard和location.show都是唯一的,这一步应该没问题,但还是要确认下其他路由的名称是否有重复。

按照这几步操作后,就能解决所有导航项被标记为active的问题,同时正常使用命名路由完成跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:12:53