【问题标题】:How to store state of tabs based on route?如何根据路由存储选项卡的状态?
【发布时间】:2019-12-19 20:39:49
【问题描述】:

是否可以根据我当前所在的路线存储<v-tab> 组件的不同状态?我基本上想要实现的是,有一个像下面的代码这样的单个组件,我在几个不同的路线中使用它,但是让它记住我当前所在的选项卡,具体取决于路线。

  <v-layout justify-space-around row>
    <v-tab v-for="tab in navbarTabs" :key="tab.id">{{ tab.name }}</v-tab>
  </v-layout>

data() {
 return {
    navbarTabs: [
    {
      id: 0,
      name: "Home"
    },
    {
      id: 1,
      name: "Schedule"
    },
    {
      id: 2,
      name: "Tech card"
    },
    {
      id: 3,
      name: "Specifications"
    },
    {
      id: 4,
      name: "Control card"
    },
    {
      id: 5,
      name: "Packing"
    }
  ]
 }
}

我之前设法通过拥有一些相同的&lt;v-tab&gt; 组件来实现预期的结果,这些组件是我根据当前路线使用v-if 有条件地可视化的,但这种解决方案似乎有点粗糙,根本无法扩展。 有人可以给我一些关于如何实现这一目标的指示吗?提前致谢!

【问题讨论】:

  • 我之前使用过 keep-alive,而我有 4 个 &lt;v-tab&gt; 实例,我根据路由有条件地将它们呈现为“动态”组件,但对于单个组件,它似乎不起作用。
  • 不确定我是否理解:您是否需要根据路线打开某个选项卡?例如,如果路由是/tabs/1,那么 ID 为 1 的选项卡应该是打开的?
  • @DelenaMalan 是的,我想要实现的是:当我在route1 时,我转到 id 为 3 的选项卡,例如,如果我在 route2 并且我转到 id 为 2 的标签,route1 的标签仍然是 id 3。PS对不起我的英语不好。
  • 好的。你在使用 Vue 路由器吗?

标签: vue.js vuex vuetify.js


【解决方案1】:

v-tabs 组件有一个 value 属性,您可以使用它打开带有给定key 的选项卡。 v-tab 组件有一个 to 属性,您可以使用它来设置选项卡的路由。所以本质上,你可以使用 Vue Router 参数来选择一个选项卡,你可以使用 v-tabto 属性设置路由。

您可以像这样定义您的路线,将selectedTab 参数传递给组件:

 routes: [
    { path: '/tabs/:selectedTab', component: TabsComponent, props: true },
 ]

而您的TabsComponent 可能看起来像这样:

<template>
  <v-layout justify-space-around row>
     <v-tabs v-model="selectedTab">
       <v-tab 
         v-for="tab in navbarTabs"
         :key="tab.id"
         :to=`/tabs/${tab.id}`
       >{{ tab.name }}</v-tab>
     </v-layout>
</template>

<script>
  export default {
    props: ['selectedTab'],
  }
</script>

【讨论】:

  • 感谢您花时间回答我的问题,小姐!你是救命稻草!
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2020-05-21
  • 2017-01-25
相关资源
最近更新 更多