動態添加路由遇到的問題
1,添加方法:
// temp 里是動態的路由表,
router.options.routes = router.options.routes.concat(temp)
// $addRoutes是自己實現的方法
// 具體原因:在做路徑切換
router.$addRoutes(router.options.routes)
// 具體原因:在做路徑切換
transitionTo
方法中,首先就會使用const route = this.router.match(location, this.current)
來匹配route, 其實內部會使用matcher來做匹配。修改了matcher即新的routes生效。
router.$addRoutes = (params) => {
router.matcher = new Router({mode: 'history'}).matcher;
router.addRoutes(params)
}
2,添加時機:
router.beforeEach((to, from, next) => {
if (to.path == '/login') {
sessionStorage.removeItem('user');
}
let user = JSON.parse(sessionStorage.getItem('user'));
if (to.path != '/login' && to.path != '/regist') {
if(user){
addTree() // 添加一次
setTimeout(next(),100)
}else{
next({ path: '/login' })
}
} else {
next()
}
})
3,刷新失效問題:
在App.vue 中添加鈎子 created 這樣每次刷新都會執行
在鈎子中重新添加路由