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

  • 腾讯视频会员安卓和苹果通用吗(腾讯视频会员安全保护怎么解除)

    腾讯视频会员安卓和苹果通用吗(腾讯视频会员安全保护怎么解除)

  • 华为nova4e面部解锁怎么设置(华为nova脸部识别解锁)

    华为nova4e面部解锁怎么设置(华为nova脸部识别解锁)

  • 腾讯上视频都有版权嘛(腾讯有个视频叫什么)

    腾讯上视频都有版权嘛(腾讯有个视频叫什么)

  • 华为p40如何关闭应用(华为p40如何关闭正在运行的程序)

    华为p40如何关闭应用(华为p40如何关闭正在运行的程序)

  • 主控文档和子文档有什么用(主控文档和子文档操作wps)

    主控文档和子文档有什么用(主控文档和子文档操作wps)

  • 微信号只能是英文和数字吗(微信账号可以纯英文吗)

    微信号只能是英文和数字吗(微信账号可以纯英文吗)

  • 苹果电脑保存快捷键(苹果电脑怎么保存文件快捷键是什么)

    苹果电脑保存快捷键(苹果电脑怎么保存文件快捷键是什么)

  • qq打电话为什么自动挂断(qq打电话为什么不显示打电话页面)

    qq打电话为什么自动挂断(qq打电话为什么不显示打电话页面)

  • 苹果手机手电筒灰色打不开怎么回事(苹果手机手电筒打不开什么原因,怎么弄)

    苹果手机手电筒灰色打不开怎么回事(苹果手机手电筒打不开什么原因,怎么弄)

  • 健康码申请怎么不用手机号(健康码申请怎么写)

    健康码申请怎么不用手机号(健康码申请怎么写)

  • kindle可以干什么(kindle可以干啥)

    kindle可以干什么(kindle可以干啥)

  • ios12能不能降级(ios12可以降级到10吗)

    ios12能不能降级(ios12可以降级到10吗)

  • 数据库系统管理数据的特点(数据库系统管理软件)

    数据库系统管理数据的特点(数据库系统管理软件)

  • 苹果xr双卡双待缺点(苹果XR双卡双待信号好吗)

    苹果xr双卡双待缺点(苹果XR双卡双待信号好吗)

  • 数据中心是指什么(数据中心是指什么意思)

    数据中心是指什么(数据中心是指什么意思)

  • 手机酷狗音乐怎么传到电脑(手机酷狗音乐怎么传到电脑上)

    手机酷狗音乐怎么传到电脑(手机酷狗音乐怎么传到电脑上)

  • 苹果手机突然开不了机(苹果手机突然开不了机了是什么原因)

    苹果手机突然开不了机(苹果手机突然开不了机了是什么原因)

  • qq音乐怎么绑定微信(qq音乐怎么绑定小度音箱)

    qq音乐怎么绑定微信(qq音乐怎么绑定小度音箱)

  • 抖音怎么设置关注的人不让别人看(抖音怎么设置关系)

    抖音怎么设置关注的人不让别人看(抖音怎么设置关系)

  • 苹果手机下载qq要钱吗(苹果手机下载qq音乐怎么下载到本地音乐)

    苹果手机下载qq要钱吗(苹果手机下载qq音乐怎么下载到本地音乐)

  • 华为b5各个版本区别(华为b5是什么时间上市的)

    华为b5各个版本区别(华为b5是什么时间上市的)

  • vivo最近删除的照片删除怎么恢复(vivo最近删除的短信在哪里)

    vivo最近删除的照片删除怎么恢复(vivo最近删除的短信在哪里)

  • 苹果gsx查询是什么(苹果查询gsc是什么意思)

    苹果gsx查询是什么(苹果查询gsc是什么意思)

  • 苹果为什么下载不了最右(苹果为什么下载的软件不在桌面上显示)

    苹果为什么下载不了最右(苹果为什么下载的软件不在桌面上显示)

  • eusexe.exe进程安全吗 可以结束吗 eusexe进程信息查询(jinjia.exe进程)

    eusexe.exe进程安全吗 可以结束吗 eusexe进程信息查询(jinjia.exe进程)

  • 【蓝牙系列】蓝牙5.4到底更新了什么(2)(蓝牙11)

    【蓝牙系列】蓝牙5.4到底更新了什么(2)(蓝牙11)

  • 长期零申报的公司容易注销吗
  • 企业的企业所得税
  • 外贸企业出口退税申报流程操作
  • 个人所得税是什么
  • 资产报废需要税务登记吗
  • 上月已收款,本月开的票怎么做分录
  • 预付账款收不到发票汇算清缴调整增吗
  • 金蝶kis旗舰版使用手册
  • 核定征收企业怎么申报
  • 以旧换新帐务处理
  • 小微企业如何申请土地建厂房
  • 长期股权投资减值准备
  • 一般纳税人增值税优惠政策
  • 物业做账的时候怎么做
  • 自收自支事业单位是什么意思
  • 不动产发票如何开具
  • 总资产周转率多少算高
  • 所得税调增调减项目
  • 资产负债表损益表现金流量表
  • 投资利税率计算器在线计算
  • 固定资产提前报废账务处理
  • 信用担保对中小企业的作用
  • 应收账款质押账户被冻结
  • 对赌协议的账务处理流程
  • window休眠
  • 安装额外语言
  • 主营业务收入平均增长率计算公式近两年
  • 模具费用如何平摊到产品上
  • 出租方的维修义务
  • 你知道怎么安装
  • php add
  • 收到服务费发票可以计入什么科目
  • PHP:apache_reset_timeout()的用法_Apache函数
  • iframe更改自身src
  • 小满Vue3第三十六章(Vue如何开发移动端)
  • php aes
  • php获取表单数据保存到mysql中
  • 前端权限控制实战
  • thinkphp和php
  • 公司期货套期保值会计处理方法
  • 修的公路是否上固定资产
  • 普通发票密码区出格了能用吗
  • python copyto
  • 帝国cms简介标签
  • 股权激励如何做会计分录
  • 餐饮业税务申报
  • 没有发票可以先入费用科目吗
  • 发放职工薪酬计入什么科目
  • 减免税款属于政府补助利得吗
  • 融资购入的固定资产如何记账
  • 产品质量问题扣款账务处理
  • 自产自用的产品增值税怎么算
  • 银行的现金解款需要多久
  • 商品未入库直接销售怎么记账
  • 退回上年度企业所得税
  • 增值税专用发票丢了怎么补救
  • 企业如何计算增值税
  • 怎样计算计时工资
  • sql server常见故障
  • sql的常用函数
  • wdcp面板
  • windows硬盘是什么意思
  • window8系统更新
  • 怎么把html转换成psd
  • 硬盘安装xp系统安装教程
  • 用户账户限制
  • win8如何删除登录密码
  • win8打开蓝牙设置
  • windows8.1开机
  • nodevideo翻译
  • opengl入门教程
  • easyui折叠面板默认折叠
  • 批处理实现电脑登陆二次验证
  • js实现聊天框
  • jquery滚动插件
  • centos7如何安装
  • 资源税包括哪些
  • 大连明珠卡手机nfc充值
  • 江苏税务缴费小程序
  • 深圳市国家税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设