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

  • 华为p40黑名单在哪里查看(华为p40手机黑名单)

    华为p40黑名单在哪里查看(华为p40手机黑名单)

  • vivo手机如何隐藏应用不在桌面看到(vivo手机如何隐藏软件图标)

    vivo手机如何隐藏应用不在桌面看到(vivo手机如何隐藏软件图标)

  • 荣耀v9可以放两张电信卡吗(荣耀v9支持双频wifi吗)

    荣耀v9可以放两张电信卡吗(荣耀v9支持双频wifi吗)

  • 哪款手机微信支持美颜(可以微信支付的手机)

    哪款手机微信支持美颜(可以微信支付的手机)

  • 快手昵称为什么带数字(快手昵称为什么改不了)

    快手昵称为什么带数字(快手昵称为什么改不了)

  • 硬盘变raw无法读取(硬盘变raw无法读盘)

    硬盘变raw无法读取(硬盘变raw无法读盘)

  • 手机录音有电流声(手机录音有电流怎么回事)

    手机录音有电流声(手机录音有电流怎么回事)

  • qq音乐怎么关闭车载模式(qq音乐怎么关闭自动续费会员)

    qq音乐怎么关闭车载模式(qq音乐怎么关闭自动续费会员)

  • 主板静电怎么处理(主板静电反应的症状)

    主板静电怎么处理(主板静电反应的症状)

  • 如何一键取消全部隐藏(如何一键取消全部隐藏窗口)

    如何一键取消全部隐藏(如何一键取消全部隐藏窗口)

  • 苹果相册可以加密码吗(苹果相册可以加贴纸吗)

    苹果相册可以加密码吗(苹果相册可以加贴纸吗)

  • 多媒体计算机常用的声音输入设备是(多媒体计算机常用的声音输入设备)

    多媒体计算机常用的声音输入设备是(多媒体计算机常用的声音输入设备)

  • 华为手表和荣耀手表的区别是什么(华为手表和荣耀手机能匹配吗)

    华为手表和荣耀手表的区别是什么(华为手表和荣耀手机能匹配吗)

  • iphone11怎么显示运营商(iPhone11怎么显示LTE)

    iphone11怎么显示运营商(iPhone11怎么显示LTE)

  • 为什么iphonexs照片偏红(苹果xs拍照为啥显脸大)

    为什么iphonexs照片偏红(苹果xs拍照为啥显脸大)

  • 京东原物返回是修了吗(京东原物返回是啥意思)

    京东原物返回是修了吗(京东原物返回是啥意思)

  • 淘宝心级怎么划分(淘宝心级怎么快速提升)

    淘宝心级怎么划分(淘宝心级怎么快速提升)

  • 手机怎么上传证件照片(手机怎么上传证件照)

    手机怎么上传证件照片(手机怎么上传证件照)

  • se是什么意思(瑟是什么意思)

    se是什么意思(瑟是什么意思)

  • sd卡空间不足怎么清理(sd卡空间不足怎么清理小米)

    sd卡空间不足怎么清理(sd卡空间不足怎么清理小米)

  • 隔空投送文件储存在哪(隔空投送文件夹储存在哪)

    隔空投送文件储存在哪(隔空投送文件夹储存在哪)

  • imx582和imx586区别(imx582与imx686)

    imx582和imx586区别(imx582与imx686)

  • mate20灭屏显示设置

    mate20灭屏显示设置

  • 华为手机的指纹设置在哪里(华为手机的指纹传感器在哪里)

    华为手机的指纹设置在哪里(华为手机的指纹传感器在哪里)

  • 拼车app怎么开发定制(如何开拼车)

    拼车app怎么开发定制(如何开拼车)

  • 计算土地增值税时允许扣除的项目有
  • 一般纳税人的税种有哪些
  • 增值税附加税是几个点
  • 民办非企业工会经费
  • 向境外支付赔偿金需要发票么
  • 固定资产清理时残值怎么处理
  • 增值税税控系统技术维护费怎么抵扣
  • 增值税减免所得税填在哪一栏
  • 没有社保的临时工值得干吗
  • 人力资源公司代招的岗位可以去吗
  • 装修费是否计入固定资产
  • 稽查补缴增值税做账
  • 股票质押式回购交易业务
  • 总分包外地施工怎样预缴税款?
  • 代垫款收到的发票在哪里
  • 海关进口关税专用缴款书可以抵扣吗
  • 税收的凭证有哪几种
  • 滞纳金入什么会计科目
  • 小型微利企业核定征收
  • 开发票有时间限制吗?
  • 无租使用房产协议
  • 小规模纳税人无票收入免税吗
  • 公司开业前启动大会
  • 反结账是什么意思怎么取消
  • 商标申报费用会退回来吗
  • 企业所得税汇算清缴扣除标准2023
  • thinkphp 模型
  • php运行js代码
  • 房产证和不动产权证都要办理吗
  • 发行的企业债券是什么会计科目
  • 企业所得税扣除限额标准
  • 固定资产清理的会计科目处理
  • php restful接口
  • SpringBoot+Vue实现文件上传下载功能
  • vue图片点击放大
  • 微信小程序开发一个多少钱
  • ChatGPT 逆天测试,结局出乎预料
  • php判断时间区间
  • vue 动态tab
  • 代扣代缴的境外收入企业所得税可以抵减吗
  • 计提了年终奖还能冲回吗
  • 固定资产出售算不算收入
  • sql批量替换值
  • 安装和使用蓄能器应注意哪些问题
  • 福利部门领用材料计入什么科目
  • 母子公司合并报表案例
  • 计提坏账准备的方法
  • 银行电子承兑到期了怎么兑现操作
  • 罚款支出算费用吗
  • 现金净流量的计算公式正确的有
  • 汇算清缴所得税的账务处理会计分录
  • 年终奖金计入工资薪金所得吗
  • 新成立的公司哪个地方能查到
  • 合并编制报表主要有哪几种
  • 建造合同收入
  • sql server 2019自定义安装教程
  • xp系统怎么调出任务管理器
  • 在windows中用户建立的文件默认具有的属性是
  • ubuntu安装chrom
  • windows 10 mobile--移动版
  • windowsxp右键没反应
  • linuxzen
  • SetPoint.exe - SetPoint是什么进程 有什么用
  • 删掉sam文件后无法开机
  • win7任务管理器怎么打开
  • win10移动版能运行电脑软件吗
  • uinty实现玩家跟随鼠标位置平滑旋转角度
  • opengl编程实例
  • ie6-ie10的浏览器
  • Node.js中的什么模块是用于处理文件和目录的
  • 批处理删除除了某个文件外的所有文件
  • 用python写个脚本
  • python类的理解
  • 超链接打开比较合适的方式是什么
  • 如何用python做图像处理
  • css中position的用法
  • 个体户开票怎么开步骤
  • 四川省成都市国池酒厂52度原浆多少钱一瓶
  • 税务三方协议多久生效
  • 增值税发票开具后多长时间可在查询平台查询到?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设