在应用运行时为Vue.js路由器添加路由



我目前正在构建一个应用程序,我想添加扩展到这个应用程序。这些扩展应该有自己的Vue组件和和视图(因此也路由)。我不想重新构建应用程序,而是动态地添加新的视图和路由。在Vue 2中有什么好的方法可以做到这一点吗?

在下面我添加了一些文件,我希望能使这个问题更容易理解。router/index.js包含基本结构,并按规则添加到main.js文件中。在app.vue负载期间,应加载新的路由,并将其附加在已有的路由上。

路由器

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')

App.vue

<template>
<div id="app">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link> |
<router-link to="/test">Test</router-link>
</div>
<router-view/>
</div>
</template>
<script>
// @ is an alias to /src
import TestView from '@/views/Test.vue'
export default {
name: 'Home',
components: {},
created() {
<add route to router>({
component: TestView,
name: "Test",
path: "/test"
})
}
}
</script>

我使用短语<add route to router>来演示我想要添加路由的方式。添加路由后,用户应该能够通过<router-link to="/test">Test</router-link>直接导航到新的视图。

如有任何帮助,不胜感激。

使用addRoute在运行时添加路由。以下是文档中对该方法的解释:

给路由器添加一条新路由。如果该路由有一个名称,并且已经存在一个具有相同名称的路由,它将覆盖该路由。

router导入App。使用

App.vue

<script>
import router from './router/index.js';
import TestView from '@/views/Test.vue'
export default {
created() {
router.addRoute({
component: TestView,
name: "Test",
path: "/test"
})
}
}
</script>