【开发日记】Vue2动态路由踩坑指南

vue2 动态路由权限菜单+按钮权限实现 在Vue2中实现动态路由主要通过 vue-router 的 addRoutes (已被废弃)方法或 addRoute方法(Vue Router 3.1.0+)。现在有两种思路可以实现动态菜单。:后端直接返回带有相关权限的,规定格式的菜单信息,由前端处理生成路由信息。:后端返回权限标识列表,这个标识列表和前端的路由结构的 name 字段的值进行匹配,如果匹配成功,说明用户具有该菜单的权限。 阅读详情

前言

背景是对一个Vue2的老项目进行动态路由改造,原来是静态路由。

踩坑指南

1、component中的@符号不能由服务端返回,因为很可能会识别成其他内容。

component = () => import(`@/${route.component}`);

**2、**子路由的path不能以/开头,根路由的path必须以/开头。

**3、**使用router.addRoute(route)来动态添加路由。

import router from "@/core/router";
...
router.addRoute(route);

实现步骤

1、创建vue-router对象

以下是router.js内容。

import Vue from "vue";
import Router from "vue-router";
export const constantRoutes[...公共静态路由...];
export default new Router({
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRoutes,
    base: "/"
})

2、初始化Vue

正常通过new创建Vue对象,main.js示例如下:

import router from '@/core/router.js'
import Vue from 'vue'
import App from './App.vue'

let vue=new Vue({
      router,
      render: h => h(App),
}).$mount('#app');

3、动态添加路由

addRoutes: function (routes) {
    return new Promise((resolve, reject) => {
        try {
            routes.forEach(item => {
            	//addRoute函数时自定义的,根据自己的业务逻辑编写 
                let route = this.addRoute(item); 
                router.addRoute(route);
            });
            resolve(); // 所有路由添加完成后调用 resolve()
        } catch (error) {
            reject(error); // 如果发生错误调用 reject()
        }
    });
},

4、添加动态路由的时机

存在三个添加动态路由的时机。

第一个是当前用户登录成功后获取当前用户拥有的权限页面路由进行添加。

第二个是刷新了网页后动态路由会被清空,此时应监听刷新页面并重新添加。

第三个是第一次打开页面,但无需重新登录(记住登录状态)需要重新添加路由。

5、监听页面刷新

在监听页面刷新时应判断是否符合刷新路由的条件,比如本地缓存中没有路由信息。在下一次切换界面时即调用添加动态路由的方法。

window.onbeforeunload = function () {//刷新会触发这个事件  
    if(判断是否符合条件){
        // 写入缓存表示需要更新路由
      	sessionStorage.setItem("RefreshRouter", false);
    }
};

6、设置路由前置守卫配置

设置路由前置守卫配置主要就是用来监听用户切换界面,如果用户在切换界面之前刷新了浏览器,那么系统需要在用户切换界面之前重新添加动态路由。

router.beforeEach((to, from, next) => {
      RouterUtils.refreshRouter(router,to).then(() => {
            // 其他逻辑
            next()
      })
});

在refreshRouter函数中判断RefreshRouter缓存是否需要重新添加路由。

结语

本人主攻方向是后端,此流程不一定是最优解,也可能存在一些问题,欢迎留言讨论。

Vue使用日记(22):vue-router详解(3)——动态路由 动态路由 有时候一个path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径: /user/aaaa或/user/bbbb; 除了有前面的/user之外,后面还跟上了用户的ID; 这种path和component的匹配关系,我们称之为动态路由(也是路由传递数据(参数)的一种方式)。 配置和使用步骤: 第一步,首先创建组件,没有组件怎么跳转: 第二步,在配置文件in... 阅读详情

相关推荐

打造你自己的小程序容器 —— 一套能装得下整个未来的跨端技术!

摘要: 本文介绍了一种基于Capacitor框架开发的轻量级“小程序容器”解决方案——LapDrop。通过模拟微信小程序的运行逻辑(动态加载、原生能力调用、沙盒环境),LapDrop允许开发者自主构建跨平台(iOS/Android/Web)的小程序生态。其核心利用Capacitor的插件桥接机制,实现JS与原生功能的无缝调用,并支持浏览器调试与原生环境一致化。优势包括插件化架构、状态隔离、热更新及开放权限控制,适用于企业级模块化应用或开发者工具。未来计划扩展生命周期管理、远程加载等功能,目标成为开源的小程序

CangYuChenAi的博客 973

Vue2实现动态路由配置

关于动态路由有前端实现和后端直接根据登录用户权限返回对应路由表两种方式实现,这里所讲的是偏前端方式实现(根据登录后后端返回用户roles字段进行身份判断)

qq_30907143的博客 1万+

Spark 大数据环境搭建( Linux 系统安装和配置)

(1)选择典型安装(2)选择“安装程序光盘映像文件(iso)”,点击右侧的浏览按钮, 找到下载好的iso 文件,然后点击下一步。(3)将全名、用户名、密码、确认等几项均设为“spark”, 方便后面使用,然后点击下一步。(4)在命名虚拟机的窗体中,可以设定一下虚拟机名称或直接按默认,然后点击下一步。(5)在指定磁盘容量的窗体中,设定虚拟机使用的最大磁盘大小为60GB,虚拟机文件尺 寸是在使用过程中按需增长的,最大限制为 60GB。

2301_80186825的博客 1603

Vue2 动态路由的使用

1 什么是动态路由: 工作中经常用到的情况就是,在导航菜单中,如果没有登录,我们则只展示一部分信息,如果登录,再将其余的信息展示,这就是动态路由,此时我们不需要在手动配置路由,后端将路由数据返回,我们拿到数据,进行匹配。 2 效果图: 登录前: 登录后: 3 完整代码部分: (1)这里直接在根组件测试 app.vue 文件 <template> <div id="app"> <div class="nav"> &l

遇事不决,可问春风。 9913

移动硬盘报错0x80070570?5分钟搞定CHKDSK修复(附详细参数说明)

本文针对移动硬盘报错0x80070570问题,提供了详细的CHKDSK修复方法。通过5分钟核心修复流程,指导用户使用系统自带工具快速修复文件系统逻辑错误,恢复硬盘访问。文章还深入解析了CHKDSK参数,并提供了备选数据恢复方案与日常防护建议。

app77的博客 233

AutoCAD二次开发(.Net)之XData

对于CAD中的实体进行筛选等操作,常常会用到实体的XData属性,下面介绍一下实体的XData的增删改。 //XData的新增,修改跟新增一样,new一个ResultBuffer,赋值即可 Document doc=Application.DocumentManager.MdiActiveDocument; using (DocumentLock dl = doc.LockDocument()) { using (Transaction trans = doc.TransactionManager.S.

qq_21489689的博客 2591

vue2 创建动态路由

1、在登陆页面使用localstorage。setItem方法,在登陆成功后获取token、menus,其中menus中的某个字段含有登陆后的所有路径,根据自己项目进行修改即可。2、在src/views路径下创建src/views/404/index.vue准备一个404页面。3、在src下创建layout/index.vue作为首页。这些路径根据自己项目进行改动即可。

weixin_50986057的博客 1656

解锁RK3588视觉潜能:RGA硬件加速库实战指南

本文深入探讨了如何利用RK3588芯片内置的RGA硬件加速库,解决视觉应用中图像预处理的性能瓶颈。通过实战指南,详细介绍了RGA库在YUV转RGB、图像缩放等核心操作上的应用,相比CPU软处理可大幅降低延迟与CPU占用,从而充分释放RK3588的NPU算力,构建高效的AI视觉预处理流水线。

zeta9的博客 669

vue2 动态路由的实现

一般情况下,路由都是前端约定好的,但是每当项目发布上线,或者客户需求新的页面的时候,都需要做出路由改变。这样运维就可以现场支持,方便做出可操作的中户中台,来管理我们的中心项目登录及权限,路由等方面;注意:isDynamicRouting 这个值决定了是否使用动态路由,声明在全局里面!这样就必须使用动态生成路由,由后台返回具体的路由结构体;我这边是这样模拟的;登录成功后记得要将 最上方等你们约定数据结构放到 缓存当中哦!引入路由 vue 组件(望理解打码!

weixin_50559423的博客 1542

【RK3399 Ubuntu】基于rk3399的lxde的lubuntu桌面移植适配记录之第二步:最基本Ubuntu根文件系统的相关常用工具完善

文章目录1.使能系统网络管理服务1.1 安装驱动modules管理工具1.2 使能网络服务2.终端自动补全命令功能3.安装ssh服务4.安装系统信息查看工具5.安装resize工具6.安装lrzsz工具7.使能rc.local服务7.1 修改服务Install块7.2 使能rc.local.service服务7.3 添加执行脚本且赋予执行权限 续接上文,本文主要完善前面已经制作好的rootfs 1.使能系统网络管理服务 1.1 安装驱动modules管理工具 apt-get install kmod 1.

wang 恒 的博客 1385

21天教你学会PCIe专栏(17)--多功能设备

1.1 定义多功能PCIe设备:多功能PCIe设备是指在一个物理设备中集成了多种功能的设备。这些功能可以通过不同的PCIe功能(Function)来实现,每个功能可以独立配置和管理。1.2 优点资源利用率:通过集成多种功能,减少物理设备的数量,提高资源利用率。成本效益:减少硬件成本和功耗,提高系统的经济性。灵活性:用户可以根据需要启用或禁用不同的功能,提高系统的灵活性。可扩展性:通过增加新的功能,扩展设备的功能,提高系统的可扩展性。1.3 应用场景网络设备。

xiaoheshang_123的博客 531

vue3使用keep-alive缓存组件与踩坑日记

网上有很多教程都教人在App.vue里面的 router-view 标签中配置 keep-alive 标签,App.vue里面一般都有 router-view 标签做为路由出口,但它并非一定就是需要缓存的页面组件的路由出口。需求举例:需要缓存Home页面,使其在切换到其它页面再切换回来时不用再次渲染和获取请求。是一个vue自带的内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例。方法一:在页面内另起一个不带 setup 的script标签。

m0_64664995的博客 2097

连续相位调制通信调制方法的载波同步和定时同步研究及MATLAB仿真

本文将探讨CPM调制方法中的载波同步和定时同步问题,并提供MATLAB仿真源代码。本文讨论了连续相位调制通信中的载波同步和定时同步问题,并提供了相应的MATLAB仿真源代码。通过适当的载波同步和定时同步方法,可以实现对CPM信号的准确解调。希望本文对您理解连续相位调制通信调制方法的载波同步和定时同步问题有所帮助,同时也为您提供了一些MATLAB仿真实现的思路和示例代码。在CPM系统中,载波同步的主要任务是估计接收信号的载波频率偏移和相位偏移。在CPM系统中,常用的定时同步方法是基于自相关函数的峰值检测。

2301_79331230的博客 692

Vue日记 -- 2

Vue日记 -- 2组件路由 组件 组件化开发:整体为一个大组件,通过组件嵌入的方式进行组件化开发,这样同一个组件就可以进行重用,需要更 改时只需修改一处即可 ** 组件注册(组件模板必须有唯一的根元素) 全局组件:任何位置均可使用的 如 Vue.component('hello-world', { data() { return { msg: 'helloworld'

q6301031的博客 245

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

一、VueJs 填坑日记之基础概念知识解释

概述在最开始听说vuejs这个词是在2016年,当时天真的认为自己是个后端开发工程师不需要学习太多的前端知识,不过紧接着在2017年在公司就用到了vuejs。对于初学者(尤其是干后端的初学者)来说,刚接触时,有好多思路都很难理解。 本来写这一系列博客,只是为了记录自己在这一段时间学习vuejs的成果。如果有何纰漏请大家多多理解,不喜勿喷… 再说,在目前互联网的调整发展情况下,javascrip...

I Teach You, 我教你! 143

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Vue入门到上手(1)—— VueJs 填坑日记之基础概念知识解释

Vue入门到上手(1)—— VueJs 填坑日记之基础概念知识解释 概述 在最开始听说vuejs这个词是在2016年,当时天真的认为自己是个后端开发工程师不需要学习太多的前端知识,不过紧接着在2017年在公司就用到了vuejs。对于初学者(尤其是干后端的初学者)来说,刚接触时,有好多思路都很难理解。 本来写这一系列博客,只是为了记录自己在这一段时间学习vuejs的成果。如果有何纰漏请大家多多理解,不喜勿喷… 再说,在目前互联网的调整发展情况下,javascript更是在快速的更新迭代,如今对前端工程师来说,

与其终的知识小窝 559

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Vue入门到上手(8)—— VueJs 填坑日记之参数传递及内容页面的开发

Vue入门到上手(8)—— VueJs 填坑日记之参数传递及内容页面的开发 我们在上一篇博文中,渲染出来了一个列表,并在列表中使用了router-link标签,标签内的:to就是链接地址,昨天咱们是这样写的,今天我们来完成内容页面的渲染。 编写内容页面 还是废话少说,先上代码,将以下代码保存到/src/pages/Content.vue中: <template> <div> <myHeader></myHeader> <h2 v-te

与其终的知识小窝 297

前端爬坑日记,你在初入vue项目开发过程中可能会掉进的坑

这篇文章是记录我在vue项目开发中遇到的各种巨坑,希望看了能对你有一些帮助,这篇文章会长期更新 1.Vue中使用sass 首先通过以下代码安装sass的依赖: npm i sass-loader node-sass - s 然后在webepack.base.conf.js目录下配置以下代码: { test: /\.sass$/, loaders: ['...

m0_37782372的博客 669

vue3.0+vite2.0踩坑日记之动态路由导入The above dynamic import cannot be analyzed by vite.

vue3+vite踩坑日记之动态路由导入The above dynamic import cannot be analyzed by vite.

qq_29733191的博客 1万+

Vue学习日记1

声明式渲染,组件系统,客户端路由VueRouter,大规模状态管理Vuex,构建工具Webpack/Vite。Vue是一个用于构建用户页面的渐进式框架:学一点用一点。

LFhsmd的博客 1454

Springboot+vue自制可爱英语日记系统-XD动画测试版

前端开发是梦幻英语日记系统用户界面的构建者,我采用现代前端技术栈,旨在为用户打造流畅、美观且功能丰富的交互体验。我以Vue.js为核心框架,结合Element-Plus UI组件库,不仅提高了开发效率,还确保了界面的一致性与美观性。

键盘爱好者 1845

八、VueJs 填坑日记之参数传递及内容页面的开发

我们在上一篇博文中,渲染出来了一个列表,并在列表中使用了router-link标签,标签内的:to就是链接地址,昨天咱们是<router-link :to="'/content/' + i.id">这样写的,今天我们来完成内容页面的渲染。 编写内容页面还是废话少说,先上代码,将以下代码保存到/src/pages/Content.vue中: <template> ...

weixin_30383279的博客 138

Vue-router路由

菜菜菜鸟日记—Vue-router路由机制(嵌套子菜单实例) 一.了解Vue-router 1.vue-router是vue的一个插件,需要安装使用。将不同的url对应不同的组件 ,比较适合单页面开发。 2.使用cdn引入vue-router插件 <script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.4.3/vue-router.min.js"></script> 一.Vue-router基本使用 1.定

qq_42880033的博客 295

周周清(2)----踩坑日记

然后今天发现每次都会多了很多margin,搞了好久才发现原来是用bootstrap的contianer每个都会自带,然后我有用他们嵌套,这才导致有很大的padding和margin,虽然发现前面的说法挺有道理,但是我的错误没有出现在这里,我的问题是莫名出现的滚动条挤压了布局,然后导致布局变形,看网上要么是隐藏要么是创建多一层,反正我是都没用,但是我把被影响的元素的大小从100vw也就是浏览器视口的大小,变成100%body的大小,这样就解决了!今天看见别人有些方法用这个,有些不用,还专门搜了一下。

weixin_74789176的博客 1192

antv x6 踩坑日记+屏幕适配方案

vue2 基于官方模版封装的 vue 组件节点 坑一: 在点击拓扑图中触发 router.push() 事件 无法通过this 去调用 , 通过引入router 来实现导航跳转,这个时候可能会无法携带参数,这个时候重启一下项目就好。 坑二: vue组件封装的节点 data 属性 和 节点传参数 的效果不一样 ,动态的属性,可以不用传过去,通过监听动态数值的改变 来进行API的调用,修改相应节点的数值。 ...

qq_36752532的博客 5648
上一篇: 【开发日记】ElementUI表单使用原生@submit提交表单数据
下一篇: 【软件推荐】“聊崽”聊天机器人
二饭
博客等级 码龄7年 1806粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值