在动态添加路由的时候会在控制栏出现各种各样的路由警告,刚开始以为是路由name重名问题引起,后查询相关资料是动态路由添加引起的,在router/index.js文件下创建一个方法resetRouter()
addRoutes 方法仅仅是帮你注入新的路由,并没有帮你剔除其它路由。
解决方法:
1、 在router中写一个重置路由的方法resetRouter()
import Vue from "vue";
import Router from "vue-router";
Vue.use(Router);
export let routes = [
{
path: "/",
name: "main",
redirect: "/home",
component: () => import("@/views/main"),
children: []
},
{
path: "/login",
name: "login",
component: () => import("@/views/login")
}
]
const createRouter = () => new Router({
routes: routes
})
const router = createRouter()
//写一个重置路由的方法,切换用户后,或者退出时清除动态加载的路由
export function resetRouter() {
const newRouter = createRouter()
router.matcher = newRouter.matcher // 新路由实例matcer,赋值给旧路由实例的matcher,(相当于replaceRouter)
}
export default router
2、在addRoute添加动态路由之前,重置路由,即调用resetRouter()
addMenu (state, router) {
resetRouter()
// 路由的动态添加
menuArray.forEach((item) => {
router.addRoute('main',item)
})
}