当前位置: 首页 > wzjs >正文

上海专业网站建设价格低wordpress 自定义分类 模板

上海专业网站建设价格低,wordpress 自定义分类 模板,网络策划公司,网络推广活动策划方案范文在 Vue.js 中,动态路由是一种根据不同用户权限或其他因素动态改变路由列表的功能。这种机制允许开发者根据后端提供的权限数据动态渲染前端路由,实现多用户权限系统,不同用户展示不同的导航菜单。 动态路由的配置 动态路由的配置涉及到前端…

在 Vue.js 中,动态路由是一种根据不同用户权限或其他因素动态改变路由列表的功能。这种机制允许开发者根据后端提供的权限数据动态渲染前端路由,实现多用户权限系统,不同用户展示不同的导航菜单。

动态路由的配置

动态路由的配置涉及到前端路由的动态加载和解析。通常,动态路由的数据存储在数据库中,前端通过接口获取当前用户对应的路由列表并进行渲染。以下是实现动态路由的基本步骤:

  1. 静态路由配置:首先,需要配置静态路由,如登录页、首页等。这些路由通常不会改变,可以直接写在路由配置文件中。

// 创建路由实例
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: allRoutes
})
// 所有路由定义(静态+动态)
const allRoutes = [// 基础路由{path: '/',name: 'login',component: () => import("@/views/LoginView.vue")},{path: '/404',name: '404',component: () => import('@/views/Error/404View.vue')},// 动态路由容器(登录后内容){path: '/layout',name: 'layout',component: () => import('@/Layout/MainLayout.vue'),children: [] // 初始为空,动态注入路由},
]

动态路由获取:在用户登录后,前端调用后端接口获取用户对应的权限类型role。

// 需要权限控制的路由配置(扁平化结构更易管理)
const dynamicRouteConfigs = [{path: '/home', // 注意使用相对路径name: 'home',component: () => import('@/views/HomeView.vue'),meta: { title: '首页', icon: 'House',roles: ['*'] // *表示所有登录用户}},{path: 'user/list',name: 'UserList',component: () => import('@/views/user/ListView.vue'),meta: { title: '用户列表',roles: ['1','2']}},{path: 'user/role',name: 'UserRole',component: () => import('@/views/user/RoleView.vue'),meta: { title: '角色管理',roles: ['1']}}
]

路由过滤的函数

// 权限过滤方法修正
const filterRoutes = (routes, roles) => {console.log('全部的路由',routes);return routes.filter(route => {const requiredRoles = route.meta?.roles || [];console.log(requiredRoles);// 允许所有用户或角色匹配return requiredRoles.includes('*') || requiredRoles.includes(roles+'');});
};

动态添加路由,先清空已有的动态路由,然后再调用添加路由的函数进行添加,

// 动态添加路由到layout
const addDynamicRoutes = (roles) => {// 清空已有动态路由const layout = router.getRoutes().find(r => r.name === 'layout')layout.children.forEach(child => {router.removeRoute(child.name)})// 过滤并添加新路由const allowedRoutes = filterRoutes(dynamicRouteConfigs, loginStore().roles); allowedRoutes.forEach(route => { router.addRoute('layout', route); });console.log(allowedRoutes);sessionStorage.setItem('menuPath',JSON.stringify(allowedRoutes));//存储的筛选过的动态路由sessionStorage.setItem('menuName',JSON.stringify(router.getRoutes()));//存储的所有动态路由console.log(router.getRoutes());// 确保404最后处理router.addRoute({ path: '/:pathMatch(.*)*',redirect: '/404'})
}

 导航守卫部分,路由跳转前的操作。

获取用户状态存储实例,检测登录状态;判断用户未登录时直接跳转到登录页进行登录;已登录访问登录页处理,防止已登录用户重复访问登录页;动态路由注入。

使用router.addRoute()注入路由;路由跳转处理,清除旧路由(避免重复);

// 路由守卫修改部分(router/index.ts)
router.beforeEach(async (to, from, next) => {const store = loginStore()const isLogin = !!store.id// 未登录状态处理if (!isLogin) {return to.path === '/' ? next() : next('/')}// 已登录但访问登录页时重定向if (to.path === '/') {return next('/home')}// 动态路由加载逻辑if (!store.routesLoaded) {try {// 直接从store获取已保存的角色信息const userRoles = store.rolesconsole.log(userRoles);// 如果角色信息不存在则抛出错误if (!userRoles || userRoles.length === 0) {throw new Error('用户角色信息未获取')}// 添加动态路由addDynamicRoutes(userRoles)// 在添加路由后打印console.log('当前所有路由:', router.getRoutes().map(r => r.path))// 更新加载状态store.setRoutesLoaded(true)// 使用replace方式跳转避免重复记录历史return next({ ...to, replace: true })} catch (error) {console.error('路由加载失败:', error)// 清除用户状态并跳转登录页store.$reset()return next('/')}}next()
})

最后,总结整个流程,强调关键点,帮助用户全面理解路由守卫的工作机制和实现动态路由加载的正确方法。


文章转载自:

http://lCJbPTpG.jtkfm.cn
http://FwYumIQ2.jtkfm.cn
http://UCLtOazT.jtkfm.cn
http://MIiIBnqc.jtkfm.cn
http://DJ6q5R5p.jtkfm.cn
http://JAxtooRq.jtkfm.cn
http://xatZsk94.jtkfm.cn
http://78oY2e6Y.jtkfm.cn
http://LExqt4Mj.jtkfm.cn
http://WpAjWfHT.jtkfm.cn
http://vOueRqiC.jtkfm.cn
http://JC0o8ikp.jtkfm.cn
http://RS9Pkm9q.jtkfm.cn
http://ZASO66QN.jtkfm.cn
http://xJspLp5h.jtkfm.cn
http://H19WcDSU.jtkfm.cn
http://Sud8YrHu.jtkfm.cn
http://hqrnLTjt.jtkfm.cn
http://8lsAzjcZ.jtkfm.cn
http://SS7Yeiv8.jtkfm.cn
http://TVxxhcd7.jtkfm.cn
http://d1IucDWa.jtkfm.cn
http://hmYfsHP0.jtkfm.cn
http://2vfMi7LP.jtkfm.cn
http://51YZeWnV.jtkfm.cn
http://xgMr7Jdk.jtkfm.cn
http://fYRxZgyg.jtkfm.cn
http://l5AGLwxv.jtkfm.cn
http://Ef7e08lQ.jtkfm.cn
http://wotPbGNs.jtkfm.cn
http://www.dtcms.com/wzjs/641630.html

相关文章:

  • 网站建设可以自己弄吗知乎濮阳家电网站建设
  • 建立网站策划书如何做企业产品推广
  • 注册公司网站怎么做国外的一些网站
  • 网站 开发 外包左侧菜单 网站
  • 整站优化费用wordpress 目录关键词
  • 做机械外贸什么网站好贵阳网站设计案例
  • 上海微信网站公司哪家好常州网站建设方案优化
  • 网站开发服务 退款wordpress 新闻模板
  • 网站线框如何做国外销售网站
  • 上林县建设局网站百度指数怎么下载
  • 个人做外贸网站平台国外设计网址
  • 具体c2c网站建设实例怎么制作一个微信小程序
  • 专做律所网站海口智能建站详情
  • 网站前面的logo标志电子商务简介
  • 网站转小程序工具知更鸟WordPress用户中心
  • 网站分享到微信缩略图色盲
  • 公司网站制作设计报价免费网页模板素材
  • 大岭山镇仿做网站wordpress如何发邮件
  • 社区网站的作用万能短视频素材库免费
  • 深圳网站设计与开发acaa平面设计师证书报名费
  • 重庆建设银行网站首页手机电脑网站 建站程序
  • 翻译网站素材我的世界做指令的网站
  • 做网站的开发心得wordpress阿里巴巴图标
  • 福建建设执业资格注册中心网站广州建站公司网站
  • 企业做的网站开发费如何入帐中国建设银行官方网站首页
  • 沧州seo包年平台排行随州seo优化
  • 做餐饮企业网站的费用网上申报食品经营许可证流程
  • 网站开发背景知识视觉设计专业就业前景
  • 怎么提高网站权重编程软件免费下载
  • 网站建设捌金手指专业1滨州内做网站系统的公司