当前位置: 首页 > news >正文

vue3 + vite实现动态路由,并进行vuex持久化设计

在后台管理系统中,如何根据后端返回的接口,来动态的设计路由呢,今天一片文章带你们解

1、在vuex中设置一个方法 拿到完整的路由数据

 

const state = {routerList: []};  const mutations = {
dynameicMenu(state, payload) {// 第一步 通过glob 导入文件// const modules = import.meta.glob("../views/**/*.vue");const modules = import.meta.glob("../view/**/*.vue");function routerSet(router) {router.forEach(route => {// 判断没有子菜单,拼接路由if (!route.children) {const url = `../view${route.meta.path}/index.vue`;// 拿到获取的vue组件route.component = modules[url];} else {routerSet(route.children);}});}routerSet(payload);// 拿到完整的路由数据state.routerList = payload;}
}

2、我们在登录的时候,会将token,用户信息保存在localStorage中,而动态的路由是根据后端接口返回得来的,我们获取返回的信息,并将获取的数据传递到vuex

login({ ...loginForm }).then(({ data }) => {if (data.code === 10000) {ElMessage.success('登陆成功')// 将token保存到本地SET_TOKEN(data.data.token)localStorage.setItem('pz_userInfo', JSON.stringify(data.data.userInfo))// 根据权限动态设计路由menuPermissions().then(({ data }) => {store.commit('dynameicMenu', data.data)console.log(routerList)// 将一个响应式数据转为普通的路由数据toRaw(routerList.value).forEach(item => {router.addRoute('main', item)})// 跳转到首页router.push('/')})}})

3、将router.js中的路由删除,只留下基础的框架,将children中的数据删除,如图

// 创建路由对象
import { createRouter, createWebHashHistory } from "vue-router";
import Layout from "../view/Main.vue";
import Login from "../view/login/index.vue";const routes = [{path: "/",component: Layout,name: "main",children: []},{path: "/login",component: Login}
];

注:在登录的时候已经将router.addRoute('main', item)路由动态添加了

4、在侧边栏组件中 Aside.vue,获取动态的路由

const menuData = computed(() => store.state.menu.routerList)

到这已经完成了根据权限,完成动态路由设计,但是还有一点点的问题,比如:刷新页面后,内容变得空白,这是由于刷新之后,路由还没有重新获取,所以导致空白,我的思路是做一个数据格式化

1)安装vuex的一个插件

npm i vuex-persistedstate  vuex数据持久化插件 

2)在store 的 index.js中引入并添加plugins

import { createStore } from "vuex";
import menu from "./menu";
import createPersistedstate from "vuex-persistedstate";
export default createStore({plugins: [new createPersistedstate({key: "pz_v3Pz"})],modules: {menu}
});

3)这时候重新登录,会在控制台中看到获取的信息

4)将store中state的数据做判断

//获取存储的信息
const localData = localStorage.getItem("pz_v3Pz");
//如果有信息的化,就获取里面的menu数据,如果没有就获取原来的数据
const state = localData? localData.menu: {isCollapsed: false,selectMenu: [],routerList: []};

5)这时候发现刷新之后可以显示了,但是点击某一项的时候还是空白,这时候我们需要再main.js中添加 刷新后的动态路由添加的逻辑

//在localstoreage中获取信息
const localData = localStorage.getItem("pz_v3Pz");
if (localData) {store.commit("dynameicMenu", JSON.parse(localData).menu.routerList);store.state.menu.routerList.forEach(item => {router.addRoute("main", item);});
}

这时候根据权限动态生成路由的逻辑全部完成了,感谢大家的观看,如有不懂或者写的不好的地方请联系🐧 2096864475 谢谢大家

制作不易,希望点个小心心❤


文章转载自:

http://cYXzIuR0.Lmrcq.cn
http://2CypCJkK.Lmrcq.cn
http://BPofXJl0.Lmrcq.cn
http://5EgwxFQT.Lmrcq.cn
http://g2JtjSds.Lmrcq.cn
http://AjA7X1T6.Lmrcq.cn
http://BCA1WRvn.Lmrcq.cn
http://vZEPV1to.Lmrcq.cn
http://7PJ6Dklt.Lmrcq.cn
http://B7YXauMJ.Lmrcq.cn
http://2Z1D4WqL.Lmrcq.cn
http://kzNm4ieN.Lmrcq.cn
http://TCrGlj9o.Lmrcq.cn
http://OMirTaYT.Lmrcq.cn
http://KJpddBdA.Lmrcq.cn
http://WfdF4d82.Lmrcq.cn
http://UN4JiKpN.Lmrcq.cn
http://uJiOfxbq.Lmrcq.cn
http://mDVwfuRM.Lmrcq.cn
http://CrMafrwh.Lmrcq.cn
http://HEIBWi9A.Lmrcq.cn
http://92DHU9Q5.Lmrcq.cn
http://2LPiFvje.Lmrcq.cn
http://KCwcgQ1H.Lmrcq.cn
http://fHWNyf1O.Lmrcq.cn
http://qSGstYul.Lmrcq.cn
http://7LoLL43p.Lmrcq.cn
http://kC1QlgnG.Lmrcq.cn
http://naKQbbhw.Lmrcq.cn
http://cAR7JoXa.Lmrcq.cn
http://www.dtcms.com/a/236456.html

相关文章:

  • Swagger和OpenApi的前世今生
  • 基于Java+VUE+MariaDB实现(Web)仿小米商城
  • conda指定包安装的channel
  • linux 用户态时间性能优化工具perf/strace/gdb/varlind/gprof
  • Linux中MySQL的逻辑备份与恢复
  • Vue:Ajax
  • 微前端 - Module Federation使用完整示例
  • 深入理解PHP安全漏洞:文件包含与SSRF攻击全解析
  • 「Java基本语法」代码格式与注释规范
  • K8S认证|CKS题库+答案| 6. 创建 Secret
  • NLP学习路线图(三十):微调策略
  • 【K8S系列】Kubernetes 中 Pod(Java服务)启动缓慢的深度分析与解决方案
  • YOLO11解决方案之分析
  • PyTorch 中contiguous函数使用详解和代码演示
  • 【科研绘图系列】R语言绘制论文组图(multiple plots)
  • 【20250607接单】Spark + Scala + IntelliJ 项目的开发环境配置从零教学
  • Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
  • 【精选】计算机毕业设计Python Flask海口天气数据分析可视化系统 气象数据采集处理 天气趋势图表展示 数据可视化平台源码+论文+PPT+讲解
  • Java实现飞机射击游戏:从设计到完整源代码
  • ubuntu 22.04虚拟机配置静态IP
  • OpenWrt:使用ALSA实现边录边播
  • 【数据结构】6. 时间与空间复杂度
  • Docker镜像无法拉取问题解决办法
  • Linux内核 - 日志输出系统
  • 手机App-插入USB时自动授权点击确定按钮-使系统弹出框自动消失
  • h5 安卓手机去掉滚动条问题
  • Addressable-配置相关
  • OTF字体包瘦身,保留想要的字
  • CCPC chongqing 2025 L
  • 【高效开发工具系列】Blackmagic Disk Speed Test for Mac:专业硬盘测速工具