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

VUE如何前端控制及动态路由详细讲解

在Vue.js中,前端控制通常指的是通过Vue的响应式系统、组件化、路由、状态管理等技术来实现对前端应用的控制和管理

一、前端路由控制基础

使用 vue-router 管理路由,通过路由守卫和动态添加路由实现权限控制。

1. 安装和配置
npm install vue-router@4
//路由实例
const router = createRouter({history: createWebHashHistory(),
});

二、动态路由实现原理

根据用户权限动态生成路由表,通过 router.addRoute() 添加路由

1. 定义路由模板(静态+动态)
//基础路由
const baseRoutes = [{path: "/",name: "login",component: () => import("../views/login.vue"),},{path: "/totalTwo",component: () => import("../views/total/totalTwo.vue"),children: [],},{path: "/totalOne",component: () => import("../views/total/totalOne.vue"),children: [],},{path: "/home",name: "home",component: () => import("../views/home.vue"),meta: { title: "首页" },},
];
//=============== 动态路由配置
const dynamicRoutes = [{path: "/about",name: "about",component: () => import("../views/aboutPage.vue"),meta: { requiresAuth: true, permissions: ["2"] },},{path: "/dashboard",name: "Dashboard",component: () => import("../views/Dashboard.vue"),meta: { requiresAuth: true, permissions: ["1"] },},
];
console.log(dynamicRoutes, "全部路由");
// 路由实例
const router = createRouter({history: createWebHashHistory(),routes: [...baseRoutes, ...dynamicRoutes], // 初始化时合并路由  
});
2. 动态添加路由
  // 第一层循环:过滤有权限的路由const allowedRoutes = dynamicRoutes.filter((route) => {return store.permissions?.some((perm) =>route.meta.permissions.includes(perm));});// 第二层循环:添加路由allowedRoutes.forEach((route) => {if (!router.hasRoute(route.name)) {// 删除parentRoute.name参数和path修改router.addRoute(route); // 直接添加为顶级路由}});
}

三、路由守卫实现权限控制

使用全局前置守卫验证权限

// router/index.js
router.beforeEach((to, from, next) => {const isAuthenticated = localStorage.getItem('token')// 需要登录但未登录if (to.meta.requiresAuth && !isAuthenticated) {next('/login')}// 已登录但访问/loginelse if (to.path === '/login' && isAuthenticated) {next('/dashboard')}// 检查路由权限else if (to.meta.role && !userRoles.includes(to.meta.role)) {next('/404') // 无权限页面}else {next()}
})

四、动态菜单生成

根据过滤后的路由生成导航菜单

<!-- 在侧边栏组件中 -->
<template><div v-for="route in accessibleRoutes" :key="route.path"><router-link :to="route.path">{{ route.meta?.title }}</router-link><div v-if="route.children"><!-- 递归处理子路由 --></div></div>
</template><script>
import { computed } from 'vue'
import { useRouter } from 'vue-router'export default {setup() {const router = useRouter()const accessibleRoutes = computed(() => {return router.options.routes.filter(route => !route.meta?.hidden && hasPermission(route)})return { accessibleRoutes }}
}
</script>

http://www.mrgr.cn/news/96557.html

相关文章:

  • Go 语言常见错误
  • Java 大视界 -- Java 大数据在智慧矿山设备故障预测与预防性维护中的技术实现(163)
  • 【蓝桥杯—单片机】通信总线专项 | 真题整理、解析与拓展 (更新ing...)
  • 基于FPGA的ESP8266无线数据传输(温湿度DTH11、光照强度BH1750、WIFI模块)连接中国移动onenet云平台,仿真+上板通过+可视化平台搭建
  • Verilog中X态的危险:仿真漏掉的bug
  • 【区块链安全 | 第十四篇】类型之值类型(一)
  • 【多线程】单例模式和阻塞队列
  • 打车APP订单系统逻辑梳理与实现
  • vue如何实现前端控制动态路由
  • deepseek ai 输入法
  • 在rockylinux9.4安装mongodb报错:缺少:libcrypto.so.10文件库
  • Sentinel[超详细讲解]-3
  • UE5学习笔记 FPS游戏制作31 显示计分板
  • 跟着尚硅谷学vue-day1
  • UE5学习笔记 FPS游戏制作27 显示玩家血量
  • C++的四种类型转换
  • 《构建有效的AI代理》学习笔记
  • UE5学习笔记 FPS游戏制作26 UE中的UI
  • [数据结构]并查集(系统整理版)
  • Pinia的安装,使用,与情景教学