【发布时间】:2019-03-28 20:10:39
【问题描述】:
我是 vuejs 的新手,我使用 vue cli 3。我有一个包含不同组件的项目。我有一个菜单组件,我从一个 api 获取所有菜单项(代码如下)。 我已经安装了 vue-router 来做路由,但我的问题是我不知道如何在路由器对象中填充路由数组。我搜索了很多,但没有任何帮助。
所以基本上不是用硬编码的路径和组件填充路由。我想用从 api 获得的项目自动填充它。
<template>
<div class="Menu">
<nav class="navbar navbar-default navbar-custom">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse-1">
<ul class="nav navbar-nav navbar-right" v-for="menu in main_menu" v-bind:key="menu.menu_item">
<router-link class="dropdown-toggle" data-toggle="dropdown" :to="menu.menu_url"></router-link>
<li><router-link :to="menu.menu_url">{{ menu.menu_item }}</router-link>
<ul class="dropdown-menu" v-for="list in menu.list_item" v-bind:key="list.url">
<li><router-link v-bind:to="list.menu_url">{{ list.title }}</router-link></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<router-view></router-view>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'Menu',
data () {
return {
main_menu: null,
error:""
}
},
mounted () {
//console.log(this.page);
axios({ method: "GET", "url": "http://apiurl" }).then(result => {
this.main_menu = result.data.main_menu;
},
error => {
this.error = error;
});
}
}
}
</script>
router.js 是:
import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
Vue.use(Router)
var route = [
{
path: '/home',
name: 'Home',
component: Home
},
{
path: '/awards',
name: 'Awards',
component: () => import('./views/Awards.vue')
},
{
path: '/news',
name: 'News',
component: () => import('./views/News.vue')
},
{
path: '/product',
name: 'Product',
component: () => import( './views/Product.vue')
},
{
path: '/page',
name: 'Page',
component: () => import('./views/Page.vue')
}
];
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: route
})
还有我从 api 得到的 json:
main_menu: [
{
menu_item: "Home",
menu_url: "/home",
list_item: [ ]
},
{
menu_item: "Awards",
menu_url: "/awards",
list_item: [ ]
},
{
menu_item: "Product",
menu_url: "product",
list_item: [
{
url: "/product/sticker",
title: "sticker"
},
{
url: "/product/cup",
title: "Promotion Cup"
}
]
},
{
menu_item: "News",
menu_url: "/news",
list_item: [ ]
},
{
menu_item: "Page",
menu_url: "/page",
list_item: [ ]
}
]
谢谢。
【问题讨论】:
标签: javascript vue.js vue-component vue-router