Получить все маршруты в маршрутизаторе vue

Пытаюсь создать простое меню, используя vue router, мне нравится перебирать все маршруты и отображать в моем меню, в настоящее время я использую метод экземпляра ниже в моем компоненте, но я просто получаю функцию, как бы я перебрал для получения отдельных маршрутов?

methods : {
 getMenuLinks: function() {

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

 }

Я хочу перебрать все отображенные маршруты, чтобы получить что-то вроде ниже каждого отображенного маршрута:

<a v-link="{ path: 'home' }">Home</a>

Ответ 1

В Nuxt маршруты генерируются автоматически, поэтому я не мог сделать то, что предложил @zxzak.

Вот что вы можете сделать в этом случае.

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

Ответ 2

Вы можете просто перебрать $router.options.route в своем шаблоне:

<nav>
  <router-link v-for="route in $router.options.routes" :key="route.path" :to="route.path">{{ route.name }}</router-link>
</nav>

Возможно, добавим стили для выбранного маршрута:

:class="{ active: route.path === $router.currentRoute.path }"

изменение: для активного класса используйте вместо него https://router.vuejs.org/api/#active-class instead

Ответ 3

Вместо ретрансляции на внутренних компонентах 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')

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

Ответ 4

Другое решение - использовать Webpack require.context

// search for src/pages/**/index.vue
function routesGen () {
  const pages = require.context('./pages/', true, /index\.vue$/)
  const filePaths = pages.keys()
  const getRoutePath = filePath => filePath.match(/\.(\/\S+)\/index\.vue/)[1]
  return filePaths.map(filePath => ({
    path: getRoutePath(filePath),
    component: pages(filePath).default
  }))
}