web-dev-qa-db-ja.com

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>
27

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: []
        }
    }
}
32
Richard Ayotte

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/

5
zxzak

テンプレートの$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 を使用します

4
Blauhirn