获取vue路由器中的所有路由

Jim*_*bor 30 vue.js vue-router

我试图使用vue路由器创建一个简单的菜单,id喜欢迭代所有路由并显示在我的菜单中,目前我在我的组件中使用下面的实例方法,但我只是得到一个函数,我将如何迭代获取单独的路由?

methods : {
 getMenuLinks: function() {

        var t = this.$router.map() ;
        //t returns a vue object instance
        return t._children ;
        // did not know how to iterate this 
   }

 }
Run Code Online (Sandbox Code Playgroud)

我想迭代所有maped路由以获得类似于每个映射路由的下面的内容:

<a v-link="{ path: 'home' }">Home</a>
Run Code Online (Sandbox Code Playgroud)

Ric*_*tte 35

在Nuxt中,路由是自动生成的,因此我无法做@zxzak建议的操作.

这是你在这种情况下可以做的.

<template v-for="item in items">
    <b-nav-item :to="item.path">
        {{item.name}}
    </b-nav-item>
</template>
Run Code Online (Sandbox Code Playgroud)
export default {
    created() {
        this.$router.options.routes.forEach(route => {
            this.items.push({
                name: route.name
                , path: route.path
            })
        })
    }
    , data() {
        return {
            items: []
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `$ router.options.routes`的官方文件在哪里? (6认同)
  • `$ router.options.routes`只有初始路由集.任何添加了`addRoutes`的东西都不会出现在那里. (4认同)

小智 10

从 vue-router 3.5 开始,Router 实例现在有一个 getRoutes() 方法。
所以最新的答案可能是

<router-link 
    for="r in routes" 
    :key="r.path" 
    :to="r.path"
>
    {{ r.name }}
</router-link>
Run Code Online (Sandbox Code Playgroud)
computed: {
    routes() { return this.$router.getRoutes() }
}
Run Code Online (Sandbox Code Playgroud)


phi*_*294 7

您可以简单地$router.options.route在模板中进行迭代:

<nav>
  <router-link v-for="route in $router.options.routes" :key="route.path" :to="route.path">{{ route.name }}</router-link>
</nav>
Run Code Online (Sandbox Code Playgroud)

也许为所选路线添加样式:

:class="{ active: route.path === $router.currentRoute.path }"
Run Code Online (Sandbox Code Playgroud)

编辑:对于活动类,请使用https://router.vuejs.org/api/#active-class代替


zxz*_*zak 5

而不是在Vue的内部中继,将路由放在起始组件的数据中.

var map = {
  '/foo': {
    component: Foo
  },
  '/bar': {
    component: Bar
  }
}

var routes = Object.keys(map)

var App = Vue.extend({
  data: function() {
    return {
      routes: routes
    }
  }
})

router.map(map)
router.start(App, '#app')
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/xyu276sa/380/