位置: 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(超参数及其作用)

  • 珍珠屏和水滴屏区别(珍珠屏和lcd屏哪个好)

    珍珠屏和水滴屏区别(珍珠屏和lcd屏哪个好)

  • torrent文件用什么软件打开(torrent文件手机怎么打开)

    torrent文件用什么软件打开(torrent文件手机怎么打开)

  • 淘宝一个差评要多少个好评才能补回(淘宝一个差评要多少个5星好评弥补)

    淘宝一个差评要多少个好评才能补回(淘宝一个差评要多少个5星好评弥补)

  • 闲鱼水印不想用会员名(去闲鱼水印)

    闲鱼水印不想用会员名(去闲鱼水印)

  • 在拼多多买的东西别人能看到吗(在拼多多买的东西有质量问题怎么投诉)

    在拼多多买的东西别人能看到吗(在拼多多买的东西有质量问题怎么投诉)

  • excel怎么选择不相邻的两列(excel怎么选择不同列)

    excel怎么选择不相邻的两列(excel怎么选择不同列)

  • 三星9750是什么手机(三星9750是5g手机吗?)

    三星9750是什么手机(三星9750是5g手机吗?)

  • 腾讯会议可以查看学生观看时间吗(腾讯会议可以查到别人手机号码)

    腾讯会议可以查看学生观看时间吗(腾讯会议可以查到别人手机号码)

  • mate30pro充电器多少w(mate30pro充电器多少瓦 虎扑)

    mate30pro充电器多少w(mate30pro充电器多少瓦 虎扑)

  • qq作业有时间限制吗(qq作业超时怎么办)

    qq作业有时间限制吗(qq作业超时怎么办)

  • 苹果手机放卡进去为什么说无服务(苹果手机放卡进去激活不了)

    苹果手机放卡进去为什么说无服务(苹果手机放卡进去激活不了)

  • vivo突然充不进电(vivo手机突然充不了电)

    vivo突然充不进电(vivo手机突然充不了电)

  • 微信62数据会不会封(微信62数据使用教程)

    微信62数据会不会封(微信62数据使用教程)

  • 网线直接连接路由器能用吗(网线直接连接路由器速度会降吗)

    网线直接连接路由器能用吗(网线直接连接路由器速度会降吗)

  • dlp是什么意思(医保dip是什么意思)

    dlp是什么意思(医保dip是什么意思)

  • iphone6怎么拍摄虚化背景(苹果6怎样拍照)

    iphone6怎么拍摄虚化背景(苹果6怎样拍照)

  • 腾讯微云怎么在线观看(腾讯微云怎么在QQ打开)

    腾讯微云怎么在线观看(腾讯微云怎么在QQ打开)

  • 主题单元格样式在哪(主题单元格样式强调文字颜色3)

    主题单元格样式在哪(主题单元格样式强调文字颜色3)

  • cad图纸是什么意思(cad图纸是什么意思kzd)

    cad图纸是什么意思(cad图纸是什么意思kzd)

  • 闲鱼被永久禁言有解开的么(闲鱼被永久禁言怎么解封)

    闲鱼被永久禁言有解开的么(闲鱼被永久禁言怎么解封)

  • ppsx怎么转换成ppt(ppsx怎么转换成视频mp4)

    ppsx怎么转换成ppt(ppsx怎么转换成视频mp4)

  • 手机屏幕怎么设置永不休眠(手机屏幕怎么设置别人看是黑的)

    手机屏幕怎么设置永不休眠(手机屏幕怎么设置别人看是黑的)

  • 手机不能接收验证码怎么回事(手机不能接收验证码)

    手机不能接收验证码怎么回事(手机不能接收验证码)

  • 迅雷手机版怎么解除安全模式(迅雷手机版怎么用)

    迅雷手机版怎么解除安全模式(迅雷手机版怎么用)

  • 华为nova4是什么屏(华为nova4是什么屏幕材质)

    华为nova4是什么屏(华为nova4是什么屏幕材质)

  • 小米8se是什么接口(小米8se是啥)

    小米8se是什么接口(小米8se是啥)

  • 三星svoice怎么唤醒(三星怎么设置语音唤醒bixby)

    三星svoice怎么唤醒(三星怎么设置语音唤醒bixby)

  • word占位符怎么取消(word占位符怎么居中)

    word占位符怎么取消(word占位符怎么居中)

  • 华为Nova电池容量是多少(华为nova电池容量多少7)

    华为Nova电池容量是多少(华为nova电池容量多少7)

  • OpenAI发布ChatGPT:程序员瞬间不淡定了(openai发布企业版)

    OpenAI发布ChatGPT:程序员瞬间不淡定了(openai发布企业版)

  • 个人所得税申报操作流程
  • 公司附加税怎么计算
  • 财务软件怎么样才能用
  • 固定资产的进项税额可以抵扣吗
  • 收到货款会计分录怎么做
  • 所得税费用贷方表示什么
  • 怎么查自己是否
  • 怎么确定印花税申报成功
  • 英国租金收入所得税
  • 售后回购融资租赁合同
  • 出口发票税率是怎么算的
  • 购买无形资产的价款超过正常信用
  • 水利印花税计算公式
  • 国税开增值税专票怎么开
  • 采购退货退款怎么做账
  • 资金账簿印花税最新政策2023
  • 车船税发票丢了咋办
  • 加油费发票7月1日开具
  • 会计怎么避免坐牢
  • 小规模企业资本结构
  • 财务费用为负数怎么结转
  • 固定资产产权转移
  • 我的初级备考经验--付出才有回报
  • 我的初级备考经验怎么写
  • 公司奖励员工旅游怎么做账
  • 民办非企业捐赠支出会计处理
  • 非居民企业间接转让中国应税财产
  • 融资租赁不动产税务处理
  • 权益法核算下的顺流交易
  • windows11进入桌面黑屏
  • 厂房维修是否可以退税
  • 如何删除鸿蒙
  • 金枝玉叶怎么养才爆盆
  • kb4539601安装失败
  • 企业的支付宝
  • 单位管理费用核算
  • 处置抵债资产的增值税计入
  • 固定资产抵账的增值税
  • 生产企业免抵退税实例
  • 2018年残保金申报表填表说明
  • 编译安装和普通安装
  • ChatGPT 被大面积封号,到底发生什么了?
  • 驱动开发函数详解
  • 汇算清缴补税的情况有哪些
  • 冲以前年度成本分录
  • 生产油漆涂料的物质
  • 调整多计提的工资
  • 以前年度损益调整结转到本年利润吗
  • 坏账准备计提方法一经确定不得随意变更这种做法体现了
  • 销售费用现金支出预算
  • 小微企业社保代缴
  • 工作失误扣工资的规定是什么
  • 在建工程如何转固
  • 支付政协扶贫款怎么做账
  • 支付水电费会计等式
  • 定额发票怎么领?
  • 销项发票怎么导出的是压缩包怎么打开
  • 本年利润的计算顺序为
  • mysql图形
  • solaris 10安装
  • 光盘安装系统怎么操作
  • macbook备忘录字数统计
  • win8恢复出厂设置找不到恢复环境
  • 多个网页怎么从一个网页中显示
  • win7系统玩游戏怎么样
  • linux内存耗尽怎么解决
  • cocos设计模式
  • 判断div滑动到底怎么操作
  • 考四级题型
  • 计算机图形学和计算机视觉的区别
  • 什么是自然数
  • 深入学习习总书记系列讲话精神
  • jquery中什么方法用于模拟光标悬停事件
  • unity3d怎么控制人物移动
  • js引用传递
  • Python selenium 父子、兄弟、相邻节点定位方式详解
  • android 多页面
  • 医保已申报未缴费可以撤销申报吗
  • 营业税未达起征点
  • 江西税务客服电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设