位置: IT常识 - 正文

vue 实现动态路由(vue3.0动态路由)

编辑:rootadmin
vue 实现动态路由

推荐整理分享vue 实现动态路由(vue3.0动态路由),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue实现动态路由,vue动态路由写法,vue动态路由写法,vue实现动态路由菜单,vue实现动态路由跳转,vue实现动态路由,vue实现动态路由的意思,vue实现动态路由菜单,内容如对您有帮助,希望把文章链接给更多的朋友!

1、什么是动态路由? 2、动态路由的好处 3、动态路由如何实现

1、什么是动态路由?

动态路由,动态即不是写死的,是可变的。我们可以根据自己不同的需求加载不同的路由,做到不同的实现及页面的渲染。动态的路由存储可分为两种,一种是将路由存储到前端。另一种则是将路由存储到数据库。动态路由的使用一般结合角色权限控制一起使用。 总结:

1)路由可变,不是写死的,动态加载 2)存储分两种:存前端,存数据库

2、动态路由的好处

使用动态路由可以跟灵活,无需手工维护,我们可以使用一个页面对路由进行维护。如果将路由存储到数据库,还可以增加安全性。 总结:

1)灵活,无需手工维护 2)增加安全性

3、动态路由如何实现

vue 实现动态路由(vue3.0动态路由)

在此以路由存储在数据库为例 流程:一般我们在登录的时候,根据登录用户的角色返回此角色可以访问的页面的路由,前端将路由存储到vuex(vuex存储的数据必须可持久的,不要一刷新页面就不见),我们在路由前置守卫处动态添加拿到的路由,对页面进行渲染。

1)此为我的router目录,index.js对路由添加,守卫拦截等处理。static-route.js为前端定义的静态路由,不需要动态加载的,如登陆页面,忘记密码页面,404页面等。

index.js

import Vue from 'vue'import $cookies from 'vue-cookies'import VueRouter from 'vue-router'import store from '../store'​import staticRoute from './static-route.js'​​​Vue.use(VueRouter)​​const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes: staticRoute //staticRoute为静态路由,不需动态添加})​let isToken = truerouter.beforeEach(async (to, from, next) => {//定义isToken为true和vuex不为空时添加路由if (isToken && store.state.routers.routers.length != 0) {//从vuex中获取动态路由const accessRouteses = await store.state.routers.routers;//动态路由循环解析和添加accessRouteses.forEach(v => {v.children = routerChildren(v.children);v.component = routerCom(v.component);router.addRoute(v); //添加})isToken = false //将isToken赋为 false ,否则会一直循环,崩溃next({...to, // next({ ...to })的目的,是保证路由添加完了再进入页面 (可以理解为重进一次)replace: true, // 重进一次, 不保留重复历史})​} else {if (to.name == null) {next("/404")} else {if (to.meta.title) { //判断是否有标题document.title = to.meta.title //给相应页面添加标题}next()}​}​})​function routerCom(path) { //对路由的component解析return (resolve) => require([`@/views/${path}`], resolve);}​function routerChildren(children) { //对子路由的component解析children.forEach(v => {v.component = routerCom(v.component);if (v.children != undefined) {v.children = routerChildren(v.children)}})return children}​​export default router​

2)登陆成功后将获取到的动态路由存储到vuex vuex—>index.js

import Vue from 'vue'import Vuex from 'vuex'//数据持久化import createPersistedState from "vuex-persistedstate";​Vue.use(Vuex)const routers = { namespaced: true, state: () => ({ routers:"", }), mutations: { routers(state, newsdata) { state.routers = newsdata },​ }, actions: { routers(context) { context.commit('routers') }, }, getters: { routers(state) { console.log("getters", state) return state.routers }, }}​​const store = new Vuex.Store({ modules: { routers: routers, }, // 数据持久化 plugins: [createPersistedState({ //key是存储数据的键名 key: 'routersData', //paths是存储state中的那些数据,如果是模块下具体的数据需要加上模块名称,如user.token paths: ["routers.routers"] })]})​​export default store

我的动态路由模板

//动态路由const dynamicRoute = [{ "path": "/main", "name": "main", "redirect": "/main/index", "component": "main/main.vue", "children": [{ "path": "index", "name": "index", "component": "index/index.vue", "meta": { "name": "index", "title": "首页", "icon": "el-icon-location", "menu":true //true为菜单栏 } }, { "path": "Configuration", "name": "Configuration", "redirect": "Configuration/route", "component": "Configuration/index.vue", "roles": ['developer', "admin"], // developer、admin角色的用户才能访问该页面 "meta": { "title": "配置", "icon": "el-icon-location", "menu":true }, "children": [{ "path": "route", "name": "route", "component": "Configuration/route/index.vue", "meta": { "title": "菜单", "icon": "", "menu":true }, }, { "path": "user", "name": "user", "component": "Configuration/user/index.vue", "meta": { "title": "用户管理", "icon": "el-icon-location", "menu":true }, }, { "path": "admin", "name": "admin", "component": "Configuration/admin/index.vue", "meta": { "title": "管理员管理", "icon": "", "menu":true }, }, { "path": "userEdit", "name": "userEdit", "component": "Configuration/user/user-Edit.vue", "meta": { "title": "编辑用户", "icon": "", "menu":false }, }, ] }, { "path": "check", "name": "check", "redirect": "check/user", "component": "check/index.vue", "roles": ['developer', "admin", "check"], // developer、admin角色的用户才能访问该页面 "meta": { "title": "审核", "icon": "el-icon-location", "menu":true }, "children": [{ "path": "user", "name": "checkUser", "component": "check/check-user/index.vue", "meta": { "title": "用户实名审核", "icon": "el-icon-location", "menu":true } }, { "path": "enterprise", "name": "checkEnterprise", "component": "check/check-enterprise/index.vue", "meta": { "title": "企业认证审核", "icon": "el-icon-location", "menu":true }, }, { "path": "checkNormImage", "name": "checkNormImage", "component": "check/check-norm-image/index.vue", "meta": { "title": "标准照认证审核", "icon": "el-icon-location", "menu":true }, }, { "path": "checkHiringJobs", "name": "checkHiringJobs", "component": "check/check-hiring-Jobs/index.vue", "meta": { "title": "求职、招聘认证审核", "icon": "el-icon-location", "menu":true }, } ]​ } ]}, ]export default dynamicRoute

路由管理界面(可能有不完善的地方) 讲一讲遇到的坑及注意点

“component”: “check/check-norm-image/index.vue”, 用字符串再在解析,不要像静态路由一样。否则第一次进去可以,刷新就变空白

此处为重要的一点,直接用next()不行

next({ ...to, // next({ ...to })的目的,是保证路由添加完了再进入页面 (可以理解为重进一次) replace: true, // 重进一次, 不保留重复历史 })

3)由于添加完路由还会重复执行一遍路由守卫,所有必须确保不要一直死循环添加路由。否则直接崩溃。这里我用的是isToken变量确保不循环。

分享:

走进了一间屋子,如果你是最牛的人,那么你就走错了地方。我的理解:你将没有进步的空间,止步于此。
本文链接地址:https://www.jiuchutong.com/zhishi/300484.html 转载请保留说明!

上一篇:Web 开发与搜索引擎优化,你应该选择哪一个?(web搜索与挖掘)

下一篇:Lesson 10.1 超参数优化与枚举网格的理论极限和随机网格搜索 RandomSearchCV(超参数及其作用)

  • 青春里的那个人,岁月无恙愿你安好(青春里的那个人会忘记吗)

    青春里的那个人,岁月无恙愿你安好(青春里的那个人会忘记吗)

  • 移动魔百盒是什么(移动魔百盒是什么业务怎么取消)

    移动魔百盒是什么(移动魔百盒是什么业务怎么取消)

  • oppo reno防水吗(opporeno10防水吗)

    oppo reno防水吗(opporeno10防水吗)

  • 手机屏幕漏液紫色扩散(手机屏幕漏液紫色扩散能阻止吗)

    手机屏幕漏液紫色扩散(手机屏幕漏液紫色扩散能阻止吗)

  • qq修改密码失败617(qq修改密码失败1005)

    qq修改密码失败617(qq修改密码失败1005)

  • 怎么在微信上发超过5分钟的视频(怎么在微信上发位置地图)

    怎么在微信上发超过5分钟的视频(怎么在微信上发位置地图)

  • 快手粉丝团升四级多少分(快手粉丝团升四级多少钱)

    快手粉丝团升四级多少分(快手粉丝团升四级多少钱)

  • apple care+版是什么意思(applecare版是什么意思)

    apple care+版是什么意思(applecare版是什么意思)

  • 为什么抖音粉丝显示回关(为什么抖音粉丝上不去)

    为什么抖音粉丝显示回关(为什么抖音粉丝上不去)

  • 鼠标ips是什么意思(鼠标ips是回报率吗)

    鼠标ips是什么意思(鼠标ips是回报率吗)

  • 淘宝图片发不出去是怎么回事(淘宝图片发不出去,只支持3M)

    淘宝图片发不出去是怎么回事(淘宝图片发不出去,只支持3M)

  • 笔记本电脑收不到Wi-Fi是怎么回事(笔记本电脑收不到自家的wifi信号)

    笔记本电脑收不到Wi-Fi是怎么回事(笔记本电脑收不到自家的wifi信号)

  • 关系模型的完整性主要有(关系模型的完整性包括)

    关系模型的完整性主要有(关系模型的完整性包括)

  • qq腾讯视频会员可以几个人用(qq腾讯视频会员电视可以用吗?)

    qq腾讯视频会员可以几个人用(qq腾讯视频会员电视可以用吗?)

  • 苹果11手机浮点怎么设置(苹果手机浮点在哪里打开)

    苹果11手机浮点怎么设置(苹果手机浮点在哪里打开)

  • wps表格转为文本(wps表格转为文本怎么操作)

    wps表格转为文本(wps表格转为文本怎么操作)

  • 快手c类违规是啥(快手c类违规是什么行为)

    快手c类违规是啥(快手c类违规是什么行为)

  • 无线ap隔离是什么意思(无线网络ap隔离是什么)

    无线ap隔离是什么意思(无线网络ap隔离是什么)

  • 信息安全的老三样是什么(信息安全老三样是哪三样)

    信息安全的老三样是什么(信息安全老三样是哪三样)

  • qq小草会消失吗(qq小草不发消息会掉吗)

    qq小草会消失吗(qq小草不发消息会掉吗)

  • 5g手机用4g卡行吗(5g手机用4g卡可以正常使用吗)

    5g手机用4g卡行吗(5g手机用4g卡可以正常使用吗)

  • 手机声音嘶哑怎样修复(手机声音嘶哑怎么调)

    手机声音嘶哑怎样修复(手机声音嘶哑怎么调)

  • 黑鲨手机如何快捷截图(黑鲨手机如何快速充电)

    黑鲨手机如何快捷截图(黑鲨手机如何快速充电)

  • 乐视视频如何关闭弹幕(乐视视频怎么关闭)

    乐视视频如何关闭弹幕(乐视视频怎么关闭)

  • 流量管理在哪里(手机流量管理在哪里)

    流量管理在哪里(手机流量管理在哪里)

  • 如何在阿里巴巴分销(如何在阿里巴巴选好货)

    如何在阿里巴巴分销(如何在阿里巴巴选好货)

  • 政府转让土地使用权
  • 总公司和分公司可以在一个城市吗
  • 经营性现金净流量为负数怎么解释
  • 买车哪些费用不该交
  • 公司全部股权转让流程
  • 收到进口增值税发票可以直接抵扣吗
  • 公司领导培训费怎么入账
  • 计提结转本月城建税怎么做账?
  • 融资租赁中承租人的权利
  • 固定资产未验收投入使用
  • 0申报的清算所得税申报表怎么填
  • 土地配套费如何缴纳
  • 应交税费进项税额在借方说明什么
  • 已开发票做账联放哪里
  • 库存现金与实际不符怎么调
  • 家具螺丝螺母一般在哪里卖
  • 网络服务费一般纳税人几个点
  • 合同的情势变更是什么?
  • 股份公司和有限公司工作哪个好一些
  • mac版字体怎么安装
  • 证券公司佣金是买卖都要收吗
  • androirc下载
  • 怎么提升电脑速度
  • win11自动更新卡在94%
  • 政策性搬迁损失扣除年度
  • bassmod.dll
  • 支票存根属于什么凭证类型
  • 强烈的建议
  • 高新技术企业在哪申报年报
  • 华侨是否适用个人所得税
  • 企业所得税的基本税率是多少?
  • linux搭建web服务器
  • 最详细的世界地图
  • 新建会计帐套怎么建
  • 大气污染物排放2020标准
  • 实际发生费用的概念
  • ps索引工具怎么用
  • 销售鸡蛋免税怎么交税
  • 可以现金结算的业务
  • sqlserver2008密码要求
  • sqlyog与mysql
  • 生育津贴到公司账户了多久给个人
  • 小规模纳税人税控盘怎么抵税
  • 开发研究的定义
  • 进口卷烟消费税定额税率
  • 企业缴纳员工社保会计分录
  • 请问申报残保金怎么操作
  • 小规模开票的税点是多少
  • 增值税农产品免税
  • 社保的生育险按照什么比例报销
  • 待抵扣进项税额和待认证进项税额的区别
  • 任何单位和个人都应当()为报警
  • 年报超时了可以补报吗
  • 员工工资占公司收入
  • 股权部分转让如何计算
  • 企业在销售过程中支付的消费税应通过什么账户进行核算
  • 过程要求可包括哪些内容
  • linux rpm文件怎么安装
  • centos邮件服务器
  • winxp系统介绍
  • 000.exe病毒
  • mac用chrome
  • mac电脑打开safari
  • win8系统怎么搜索软件
  • centos32
  • win10太麻烦了
  • 如何汉化一个软件
  • linux命令shell脚本
  • node.js怎么搭建服务器
  • shell怎么创建用户
  • uleb128、sleb128和uleb128p1编码格式介绍
  • python去掉末尾的换行符
  • python3.10性能
  • twist python
  • 武汉 税务局
  • 财政云操作视频
  • 国税工作人员工资标准
  • 湖北国税发票手机查询
  • 增值税纳税申报表附列资料(三)
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设