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>
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: []
}
}
}
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')
テンプレートの$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 を使用します