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

  • 小米10怎么解除锁屏 10分钟(小米10怎么解除桌面锁定)

    小米10怎么解除锁屏 10分钟(小米10怎么解除桌面锁定)

  • iphone12支持无线充电吗(iPhone12支持无线充电多少w)

    iphone12支持无线充电吗(iPhone12支持无线充电多少w)

  • 微信美颜怎么用(微信美颜怎么用轻颜相机)

    微信美颜怎么用(微信美颜怎么用轻颜相机)

  • 无推广中单元是什么意思(无推广中单元被驳回怎么解决)

    无推广中单元是什么意思(无推广中单元被驳回怎么解决)

  • 苹果手机接电话怎么通话录音(苹果手机接电话时怎么录音电话)

    苹果手机接电话怎么通话录音(苹果手机接电话时怎么录音电话)

  • 华为p40pro支持无线充电功能吗(华为p40pro支持无线磁吸充电吗)

    华为p40pro支持无线充电功能吗(华为p40pro支持无线磁吸充电吗)

  • 腾讯王卡微博免流吗(腾讯王卡微博免流么)

    腾讯王卡微博免流吗(腾讯王卡微博免流么)

  • 为什么5g手机显示4g(为什么5g手机显示4g信号)

    为什么5g手机显示4g(为什么5g手机显示4g信号)

  • 拼多多子账号给别人安全吗(拼多多子账号给别人有风险吗)

    拼多多子账号给别人安全吗(拼多多子账号给别人有风险吗)

  • b150主板最高支持什么显卡(b150主板最高支持内存)

    b150主板最高支持什么显卡(b150主板最高支持内存)

  • 苹果手机为什么不支持此配件(苹果手机为什么无线局域网打不开)

    苹果手机为什么不支持此配件(苹果手机为什么无线局域网打不开)

  • 手机4g信号旁边hd怎么取消(手机4g信号旁边hd怎么关闭)

    手机4g信号旁边hd怎么取消(手机4g信号旁边hd怎么关闭)

  • 红米7a有没有红外线(手机红米7a)

    红米7a有没有红外线(手机红米7a)

  • opporeno什么时候升级coloros7(opporeno什么时候出的款)

    opporeno什么时候升级coloros7(opporeno什么时候出的款)

  • 快手极速版怎么暂停(快手极速版怎么注销账号)

    快手极速版怎么暂停(快手极速版怎么注销账号)

  • excel如何换行输入(excel如何换行输入文字)

    excel如何换行输入(excel如何换行输入文字)

  • 加密dns需要打开吗(加密dns打开还是关闭好)

    加密dns需要打开吗(加密dns打开还是关闭好)

  • 探探喜欢次数几点刷新(探探喜欢数一般多少)

    探探喜欢次数几点刷新(探探喜欢数一般多少)

  • 苹果xr长度(苹果xr长度和宽度多少厘米)

    苹果xr长度(苹果xr长度和宽度多少厘米)

  • 麒麟980多少位(麒麟980是几g芯片吗)

    麒麟980多少位(麒麟980是几g芯片吗)

  • ps怎么把图片弄出来(ps怎么把图片弄模糊)

    ps怎么把图片弄出来(ps怎么把图片弄模糊)

  • 手机如何申请QQ号(手机如何申请qq号免费的)

    手机如何申请QQ号(手机如何申请qq号免费的)

  • 一加手机是什么(一加手机是什么时候成立的)

    一加手机是什么(一加手机是什么时候成立的)

  • qq语音通话创建失败(qq语音通话怎么设置铃声)

    qq语音通话创建失败(qq语音通话怎么设置铃声)

  • macOS Big Sur如何升级 macOS11.0升级教程(苹果电脑macos big sur)

    macOS Big Sur如何升级 macOS11.0升级教程(苹果电脑macos big sur)

  • 冬天的金阁寺,日本京都 (© yoko_ken_chan/Shutterstock)(金阁寺屋顶)

    冬天的金阁寺,日本京都 (© yoko_ken_chan/Shutterstock)(金阁寺屋顶)

  • vite环境变量配置(vericut9.0环境变量)

    vite环境变量配置(vericut9.0环境变量)

  • 分期收款企业所得税调整
  • 外购商品结转成本分录
  • 小规模纳税人自动升为一般纳税人条件
  • 未出资到位的股东
  • 信用减值损失借贷方表示什么意思
  • 建筑企业收到预售款时需要缴纳增值税吗
  • 固定资产盘盈盘亏的会计科目
  • 房地产契税新政策2021退税
  • 股东借款可以免增值税吗
  • 广告制作费可以计入印刷费吗
  • 消费税增值税如何调整?
  • 从农民手中购进农产品进项税
  • 园林绿化公司前景如何
  • 劳务费税率公式是什么
  • 水费适用税率
  • 高速公路通行费发票怎么开
  • 公益捐赠税前扣除政策
  • 进厂的政府补贴怎么拿
  • 支付机器设备修理费
  • 转让费入什么会计分录
  • 出口0税率是免抵退还是免税
  • 工程发票开具所需资料有什么?
  • 苹果a1586是什么配置
  • mac上读取ntfs
  • 结转本年利润的分录怎么写
  • .hpp是什么文件
  • php5升级到php7
  • 如何提高php性能
  • php初学
  • php中file
  • 企业的存货按照计划成本核算,期初
  • 工程的直接成本包括哪些
  • css前端还是后端
  • 领航ct
  • umount命令详解
  • 一般纳税人不得从销项税额中抵扣的进项税额有哪些?
  • 公司租赁员工的房屋
  • php框架symfony
  • 低于净资产增资 纳税
  • 财政拨款结余的明细科目有哪些
  • 环保税的纳税义务人是施工方还是建设方安徽
  • 游戏公司不开票怎么缴税
  • 减征增值税的会计科目
  • 差旅费报销时如何处理
  • 什么叫固定资产台账
  • 普通发票和增值税发票报销有什么区别?
  • 申报无票收入后期开票要冲回要备案吗
  • 货物赔偿款如何计算
  • 未取得发票该怎么说明
  • 资本化期间专门借款利息费用需将
  • 银行贷款需要哪些材料
  • 房地产企业开发的准备出售的房屋属于投资性房地产吗
  • 进项税额可以抵扣会计分录
  • 工会经费计入科目
  • 什么是计提坏账准备
  • sql操作方法
  • Windows10安装net3.5
  • bios设置或coms设置完整的说法
  • XP系统怎么删除密码
  • windows storage server 2016下载
  • linux中使用fdisk命令进行硬盘分区
  • 主板设置uefi模式
  • netcfg -d
  • xp系统几位操作系统
  • mpcmdrun.exe是什么进程
  • win10移动版微信uwp
  • Win10 Redstone 14295更新推送:QQ会不时崩溃
  • js实现日历效果
  • 导入extjs、jquery 文件时$使用冲突问题解决方法
  • easyui点击弹出窗口
  • 我是如何从0开始做到年入1000+万的
  • opengl示例
  • python代码50行
  • stick function
  • js设置导航固定
  • 利用python进行爬虫
  • 有效的沟通的好处
  • jquery动态添加div
  • 广东佛山超市排名
  • 建筑增值税税率历次调整
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设