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

Vuetify工具栏项始终激活问题:返回首页时取消v-tabs激活状态

解决Vuetify Tabs回到首页后仍保持激活状态的问题

这个问题其实是因为你的v-tabs绑定的v-model值没有在回到首页时主动重置,导致它还保留着之前选中的tab索引,所以哪怕路由切回了首页,对应的tab依然显示激活状态。咱一步步来解决:

第一步:初始化v-model变量

首先在组件的data里添加tab变量,初始值设为null(首页状态下我们希望没有任何tab被激活):

data() {
  return {
    appTitle: "ShowCase",
    drawer: false,
    tab: null // 新增:初始无选中tab
  };
}

第二步:监听路由变化,重置tab状态

我们需要监听路由的切换,当路由回到首页(路径为/)时,把tab重置为null;同时,当路由切换到对应的tab页面时,也自动设置对应的tab值(这样刷新页面时tab也能正确激活)。

在组件里添加watch监听$route,再加上mounted钩子处理页面初始化的情况:

watch: {
  $route(to) {
    // 跳转到首页时,重置tab为null
    if (to.path === '/') {
      this.tab = null;
    } else {
      // 根据当前路由设置对应的tab值
      const routeTabMap = {
        '/Tuttiigiochi': 0,
        '/Sceltidallaredazione': 1,
        '/Aboutus': 2
      };
      this.tab = routeTabMap[to.path] || null;
    }
  }
},
mounted() {
  // 页面初始化时检查路由,确保状态正确
  if (this.$route.path === '/') {
    this.tab = null;
  } else {
    const routeTabMap = {
      '/Tuttiigiochi': 0,
      '/Sceltidallaredazione': 1,
      '/Aboutus': 2
    };
    this.tab = routeTabMap[this.$route.path] || null;
  }
}

(可选)用自定义值代替索引,提升可读性

如果你觉得用索引不够直观,可以给每个v-tab设置value属性,绑定自定义字符串:

<v-tabs optional v-model="tab" fixed-tabs height="70" color="#252525" hover>
  <v-tab value="all-games" @click="$router.push('/Tuttiigiochi')"> All Games </v-tab>
  <v-tab value="retro-gaming" @click="$router.push('/Sceltidallaredazione')"> RetroGaming </v-tab>
  <v-tab value="about-us" @click="$router.push('/Aboutus')"> About us</v-tab>
</v-tabs>

对应的watch和mounted里的映射关系也要改成对应的字符串:

watch: {
  $route(to) {
    if (to.path === '/') {
      this.tab = null;
    } else {
      const routeTabMap = {
        '/Tuttiigiochi': 'all-games',
        '/Sceltidallaredazione': 'retro-gaming',
        '/Aboutus': 'about-us'
      };
      this.tab = routeTabMap[to.path] || null;
    }
  }
},
mounted() {
  if (this.$route.path === '/') {
    this.tab = null;
  } else {
    const routeTabMap = {
      '/Tuttiigiochi': 'all-games',
      '/Sceltidallaredazione': 'retro-gaming',
      '/Aboutus': 'about-us'
    };
    this.tab = routeTabMap[this.$route.path] || null;
  }
}

为什么之前的optional没用?

optional属性只是允许v-tabs处于“无选中”状态,但它不会自动在路由切换时重置v-model的值——你必须主动把tab设为null,才能触发这个无选中的状态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:32:37