- 33
- 0
我想用addRouter动态添加权限过滤路由,登陆成功跳转动态路由页面this.$router.push({path:'/page1/list'})正常,刷新就空白了
下面上代码:
在router.js中定义号常规路由和动态路由:
export const constantRouter = [
{
path: '/login',
name: 'login',
hidden: true,
component: () => import('@/views/login')
},
{ path:'/home',
name:'home',
meta:{ title:'list',icon:''},
component: () => import('@/views/home'),
},
{ path: '/', redirect: '/login', hidden: true }
]
export default new Router({
routes: constantRouter
})
export const asyncRouter = [
{
path: '/page1',
component: layout,
alwaysShow: true, // will always show the root menu
name: 'page1',
redirect: '/page1/list',
meta:{ title:'list',icon:''},
children: [
{
path: 'list',
component: () => import('@/views/list'),
name:'list',
meta:{ title:'list',icon:''},
},
{
path: 'edit',
component: () => import('@/views/form'),
name:'edit',
hidden:true,
meta:{ title:'edit',icon:''},
},
{
path: 'detail',
component: () => import('@/views/detail'),
name:'detail',
hidden:true,
meta:{ title:'detail',icon:''},
},
]
},
{
path: '/page1',
component: layout,
name: 'page2',
meta:{ title:'list',icon:''},
children: [
{
path: '/test',
component: () => import('@/views/test'),
name:'test',
meta:{ title:'test',icon:''},
},
]
},
{ path:'*',
name:'errorPage404',
hidden: true,
component: () => import('@/views/404'),
}
]
之后在main.js中addRouter:
import router from './router'
router.beforeEach((to, from, next) => {
if(to.path !== '/login'){
if(sessionUtil.getItem('recombineRouters')){
next()
}else{
let privileges = ['list','edit'];
let permission_routes = routeUtil.GenerateRoutes(privileges);
router.addRoutes(permission_routes);
console.log(router);
next({ ...to, replace: true })
}
}else{
next();
}
})
其中过滤动态路由的方法GenerateRoutes,我没有用vuex,只是写了个过滤路由的方法:
function GenerateRoutes(privileges){
var f = item => {
if(item.path === '*'){
return true;
}else{
if(item.children && item.children.length > 0){
item.children = item.children.filter(f);
if(item.children.length>0){
item.redirect = item.children[0].path;
return true;
}else{
return false;
}
}else{
return (privileges.indexOf(item.name) > -1)
}
}
}
let accessedRouters = asyncRouter.filter(f);
let recombineRouters = constantRouter.concat(accessedRouters);
sessionUtil.setItem('recombineRouters',recombineRouters);
return accessedRouters;
}
我的router是v3.0.1
首先,*(404)是写在动态路由之后的,
其次,addRouter后没有用next(),而是使用 next({ ...to, replace: true })代替
但是还是没有解决问题,求大神帮忙!
- 共 0 条
- 全部回答
-
欲望本就很美 普通会员 1楼
在 Vue.js 中,你可以使用
addRouter方法来添加动态路由。但要注意,添加动态路由并不会自动刷新页面,你需要手动刷新页面才能看到新的路由。下面是一个简单的例子:
```javascript import Vue from 'vue' import Router from 'vue-router'
Vue.use(Router)
new Router({ routes: [ { path: '/user/:id', component: User } ] }) ```
在这个例子中,当用户访问
/user/123时,将会跳转到/user/123的组件。刷新页面后,用户应该可以看到新的路由。如果你使用的是 Vue Router 的动态路由插件,例如
vue-router动态路由插件,则可以在setup函数中进行动态路由的配置。例如:```javascript import Vue from 'vue' import Router from 'vue-router'
import DynamicRoute from 'vue-router-dynamic-route'
Vue.use(DynamicRoute)
new Router({ routes: [ { path: '/user/:id', component: User } ] }) ```
在这个例子中,当用户访问
/user/123时,将会跳转到/user/123的组件。刷新页面后,用户应该可以看到新的路由。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
