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

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 谢谢大家

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

相关文章:

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

在后台管理系统中,如何根据后端返回的接口,来动态的设计路由呢,今天一片文章带你们解 1、在vuex中设置一个方法 拿到完整的路由数据 const state {routerList: []}; const mutations { dynameicMenu(state, payload) {// 第一步 通过glob…...

ThingsCloud事物云平台搭建-微信小程序

ThingsCloud云平台与微信小程序设计 本文主要是介绍ThingsCloud云平台的搭建及微信小程序与app的使用。 当前文章是作为一个通用案例,介绍如何快速使用 ThingsCloud云平台 以及 利用 ThingsCloud云平台平台的框架快速设计手机APP和微信小程序。 可以快速让硬件接入,实现硬件…...

为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题

🧩 一、为什么 uni-app 开发的 App 没有明显出现屏幕适配问题? ✅ 1. uni-app 是基于 H5 的运行环境(或类 H5) uni-app 默认使用的是 H5 的渲染引擎(如 WebView 或小程序渲染引擎)。在 H5 中,…...

学习路之php--性能优化

一、php周边优化 二、代码级优化 变量管理‌ 及时unset()释放大数组/对象,减少内存占用局部变量访问速度比全局变量快约2倍,优先使用局部变量大数组采用引用传递(&$var)避免内存 循环优化‌ 预计算循环次数: …...

GC1808:高性能24位立体声音频ADC芯片解析

1. 芯片简介 GC1808 是一款24位立体声音频模数转换器(ADC),支持96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于家庭影院、蓝牙音箱等场景。 核心特性 高精度:24位分辨率,…...

echarts使用graph、lines实现拓扑,可以拖动增加effect效果

options.js // import React from react // import * as echarts from echartsimport ./index.lessexport const useEchartsOptionFun ({ nodeDataList, getNodeLinksDataList, getLinesCoordsFun }) > {const option {title: {text: 拓扑关系图,top: top,left: center,}…...

产品经理课程(九)

从需求到功能设计 (一)复习 产品规划:产品定位、阶段性计划 产品定位:产品画布(9个步骤;最重要的是先解决什么问题) (Roadmap)目标要素:时间、事项、里程碑…...

二.单例模式‌

一.单例模式的定义 单例模式是一种‌创建型设计模式‌,确保一个类‌只有一个实例‌,并提供该实例的‌全局访问点‌。 1.1.核心目标 唯一实例‌:限制类的实例化次数仅一次。‌全局访问‌:提供统一的访问入口(通常是静…...

从零开始开发纯血鸿蒙应用之网络检测

从零开始开发纯血鸿蒙应用 〇、前言一、认识 connection 模块1、获取默认网络2、获取网络能力信息3、解析网络能力信息3.1、NetCap3.2、NetBearType 二、实现网络检测功能1、申请权限2、获取默认网路的 NetCap 数组 三、总结 〇、前言 在之前的博文里,介绍了如何实…...

向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘

作者:来自腾讯云刘忠奇 2025 年 1 月,腾讯云 ES 团队上线了 Elasticsearch 8.16.1 AI 搜索增强版,此发布版本重点提升了向量搜索、混合搜索的能力,为 RAG 类的 AI Search 场景保驾护航。除了紧跟 ES 官方在向量搜索上的大幅优化动…...

接IT方案编写(PPT/WORD)、业务架构设计、投标任务

1、IT 方案编写(PPT/WORD)​ 定制化方案:根据客户需求,提供涵盖云计算、大数据、人工智能等前沿技术领域的 PPT/WORD 方案编写服务,精准提炼核心价值,呈现专业技术内容。​ 逻辑清晰架构:采用…...

PostgreSQL 的扩展pageinspect

PostgreSQL 的扩展pageinspect pageinspect 是 PostgreSQL 提供的一个强大的底层扩展,允许数据库管理员和开发者直接检查数据库页面的内部结构。这个扩展对于数据库调试、性能优化和深入学习 PostgreSQL 存储机制非常有价值。 一、扩展概述 功能:提供…...

Unity——QFramework框架 内置工具

QFramework 除了提供了一套架构之外,QFramework 还提供了可以脱离架构使用的工具 TypeEventSystem、EasyEvent、BindableProperty、IOCContainer。 这些工具并不是有意提供,而是 QFramework 的架构在设计之初是通过这几个工具组合使用而成的。 内置工具…...

【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作

在主机A pycharm如何连接远程主机B win docker? 需要win docker配置什么? 快捷配置-主机B win OpenSSH SSH Server https://blog.csdn.net/z164470/article/details/121683333 winR,打开命令行,输入net start sshd,启动SSH。 或者右击我的电脑&#…...

股指期货波动一个点多少钱?

很多朋友在交易股指期货时,都会好奇一个问题:股指期货波动一个点,我的账户里到底是赚了还是亏了多少钱?要搞清楚这个问题,其实很简单,只需要了解两个关键信息:股指期货的“交易单位”&#xff0…...

Kafka 快速上手:安装部署与 HelloWorld 实践(一)

一、Kafka 是什么?为什么要学? ** 在大数据和分布式系统的领域中,Kafka 是一个如雷贯耳的名字。Kafka 是一种分布式的、基于发布 / 订阅的消息系统,由 LinkedIn 公司开发,后成为 Apache 基金会的顶级开源项目 。它以…...

NGINX `ngx_stream_core_module` 模块概览

一、模块定位与功能 通用 TCP/UDP 代理 支持同时处理 TCP 和 UDP 流量,透明转发请求到后端服务器组(upstream)。可作为四层负载均衡,根据客户端 IP、权重、最少连接等策略将连接分发给后端。 预读(preread&#xff09…...

iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform

Kotlin Multiplatform(简称 KMP)是 JetBrains 推出的开源跨平台开发框架 Kuikly 是腾讯开源的跨端开发框架,基于 Kotlin Multiplatform 技术构建,为开发者提供了技术栈更统一的跨端开发体验 KMP 不仅局限于移动端,它…...

探索C++标准模板库(STL):String接口的底层实现(下篇)

前引:在C的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:this指针与六大默认成员函数。它们如同对象的“隐形守护者”&am…...

Flutter知识点汇总

Flutter架构解析 1. Flutter 是什么?它与其他移动开发框架有什么不同? Flutter 是 Google 开发的开源移动应用开发框架,可用于快速构建高性能、高保真的移动应用(iOS 和 Android),也支持 Web、桌面和嵌入式设备。。它与其他移动开发框架(如 React Native、Xamarin、原…...

vue组件的data为什么是函数?

vue组件的data为什么是函数? 在JS中,实例是通过构造函数创建的,每个构造函数可以new出多个实例,每个实例都会继承原型上的方法和属性。 在vue中,一个vue组件就是一个实例,当一个组件被复用多次&#xff0…...

AI图片售卖:是暴利新风口还是虚幻泡沫?哪些平台适合售卖AI图片

还记得去年大火的Midjourney吗?今年4月,Midjourney又发布了备受期待的V7版本,带来了更高的图像质量和创新功能。使用Midjourney、Stable Diffusion、DALLE等AI图片生成工具,创作者只需输入关键词即可获得高质量的原创图片。这一变…...

​线性注意力 vs. 传统注意力:效率与表达的博弈新解

​核心结论​:线性注意力用计算复杂度降维换取全局建模能力,通过核函数和结构优化补足表达缺陷 一、本质差异:两种注意力如何工作? ​特性​传统注意力(Softmax Attention)线性注意力(Linear At…...

YOLO在QT中的完整训练、验证与部署方案

以下是YOLO在QT中的完整训练、验证与部署方案: 训练方案 准备数据集: 收集数据:收集与目标检测任务相关的图像数据集,可以是公开数据集如COCO、Pascal VOC,也可以是自定义数据集。标注数据:使用标注工具如…...

Vue在线预览excel、word、ppt等格式数据。

目录 前言 1.安装库 2.预览文件子组件代码 3、新建store/system.ts 4、父页面进行使用 总结 前言 纯前端处理文件预览,包含excel、word、ppt、txt等格式,不需要后端服务器进行部署,并且内网也可以使用。 1.安装库 npm install vue-offi…...

增量式网络爬虫通用模板

之前做过一个项目,他要求是只爬取新产生的或者已经更新的页面,避免重复爬取未变化的页面,从而节省资源和时间。这里我需要设计一个增量式网络爬虫的通用模板。可以继承该类并重写部分方法以实现特定的解析和数据处理逻辑。这样可以更好的节约…...

【JVM】三色标记法原理

在JVM中,三色标记法是GC过程中对象状态的判断依据,回收前给对象设置上不同的三种颜色,三色分为白色、灰色、黑色。根据颜色的不同,决定对象是否要被回收。 白色表示: 初始状态:所有对象未被 GC 访问。含义…...

【uniapp开发】picker组件的使用

项目uniapp,结合fastadmin后端开发 picker组件的官方文档说明 https://en.uniapp.dcloud.io/component/picker.html#普通选择器 先看效果: 1、实现设备类型的筛选;2、实现设备状态的筛选; 前端代码(节选&#xff0…...

【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程

目录 1 -> 同步云函数/云对象 1.1 -> 同步单个云函数/云对象 1.2 -> 批量同步云函数/云对象 2 -> 同步云数据库 2.1 -> 同步单个对象类型 2.2 -> 批量同步对象类型 3 -> 一键同步云侧代码 1 -> 同步云函数/云对象 说明 对于使用DevEco Studio…...

如何评估大语言模型效果

评估大模型微调后的效果是一个系统化的过程,需要结合客观指标和主观评估,并根据任务类型(分类、生成、回归等)选择合适的评估方法。 一、评估前的准备工作 数据集划分: 将数据分为 训练集、验证集 和 测试集&#xff…...