如何通过路由器名称在vue-router中使用Vuetify选项卡

时间:2019-03-29 15:38:13

标签: vue.js vue-router vuetify.js

在此question中,有一个很好的solution例子。但是当我尝试通过名称使用路由时,此方法不起作用。

我尝试过类似的事情:

<v-tabs v-model="active">
    <v-tab v-for="tab of tabs" :key="tab.id" :to="{ name: tab.route_name }">
        {{ tab.name }}
    </v-tab>

    <v-tab-item v-for="tab of tabs" :key="tab.id" :value="{ name: tab.route_name }">
        <router-view></router-view>
    </v-tab-item>
</v-tabs>
data() {
    return {
      active: '',
      tabs: [
        { id: 1, name: "Task", route_name: 'task' },
        { id: 2, name: "Project", route_name: 'project' }
      ]
    };
  }
const routes = [
  {
    path: '/task',
    name: 'task',
    component: Task
  },
  {
    path: '/project',
    name: 'project',
    component: Project
  },
];

它只是中断了,因为:value不能是Object。

我创建working jsfiddlebreaking version进行游戏。

P.S。我无法在答案中添加评论,所以我创建了一个新问题。

更新:临时解决方案:

我使用路由器的手动解析,例如:

<v-tabs v-model="active">
    <v-tab v-for="tab of tabs" :key="tab.id" :to="tab.route">
        {{ tab.name }}
    </v-tab>

    <v-tab-item v-for="tab of tabs" :key="tab.id" :value="tab.route">
        <router-view></router-view>
    </v-tab-item>
</v-tabs>
  data: {
    active: '',
  },
  computed: {
    tabs() {
      return [{
          id: 1,
          name: "Task",
          route: this.routeResolve('task')
        },
        {
          id: 2,
          name: "Project",
          route: this.routeResolve('project')
        }
      ]
    }
  },
  methods: {
    routeResolve(name) {
      return this.$router.resolve({
        name: name,
      }).location.path
    },
  },

jsfiddle example

1 个答案:

答案 0 :(得分:0)

我注意到上述解决方案存在一个问题。下一个代码是循环:

<v-tab-item v-for="tab of tabs" :key="tab.id" :value="tab.route">
    <router-view></router-view>
</v-tab-item>

这是指每个路由器将重复N次(其中N是制表符计数)。当我尝试修复它时,我发现我们只能使用下一个代码作为解决方案:

<v-tabs v-model="active">
    <v-tab v-for="tab of tabs" :key="tab.id" :to="{ name: tab.route_name }">
        {{ tab.name }}
    </v-tab>
</v-tabs>

<router-view></router-view>

...

jsfiddle