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

Vue中路由路径存在包含关系时侧边栏导航项被同时选中的问题求助

解决Vuetify侧边栏路由部分匹配导致多项同时选中的问题

这个问题我之前开发Vuetify应用时也踩过坑!核心原因是Vuetify的v-list-item-group默认采用路径部分匹配来判断激活状态——当你在/help路径下时,根路径/会被认为是它的子路径,所以对应的Dashboard导航项也会被标记为选中。

下面是两种可靠的解决方法,推荐第一种,因为用路由名称匹配更精准:

方法一:通过路由名称绑定激活状态

利用v-list-item-group的v-model和路由的唯一名称来精准匹配,避免路径部分匹配的问题。

修改后的模板代码:

<template>
  <div>
    <v-navigation-drawer v-model="drawer">
      <v-list nav dense>
        <!-- 绑定v-model到当前路由名称 -->
        <v-list-item-group v-model="activeRouteName">
          <v-list-item 
            v-for="link in links" 
            :key="link.text" 
            :to="link.route"
            <!-- 给每个item设置对应路由的name作为value -->
            :value="link.route.name"
          >
            <v-list-item-content>
              <v-list-item-title class="white--text">{{ link.text }}</v-list-item-title>
            </v-list-item-content>
          </v-list-item>
        </v-list-item-group>
      </v-list>
    </v-navigation-drawer>
  </div>
</template>

修改后的脚本代码:

<script>
export default {
  data: () => ({
    drawer: true,
  }),
  computed: {
    links() {
      return [
        {
          text: "Dashboard",
          route: { name: "dashboard" },
        },
        {
          text: "Help",
          route: { name: "help" },
        },
      ];
    },
    // 计算当前激活的路由名称
    activeRouteName() {
      return this.$route.name;
    }
  },
};
</script>

方法二:给路由添加精确匹配标识

如果更倾向于用路径匹配,可以在跳转的路由对象中添加exact: true,强制v-list-item只在路径完全匹配时才激活:

修改links中的路由配置:

links() {
  return [
    {
      text: "Dashboard",
      // 添加exact: true,强制精确匹配根路径
      route: { name: "dashboard", exact: true },
    },
    {
      text: "Help",
      route: { name: "help" },
    },
  ];
},

这种方法适合简单场景,但如果有嵌套路由的话,还是方法一的路由名称匹配更稳定,因为路由名称是全局唯一的,不会出现路径重叠的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:37:27