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

vue3 使用 Vue Router实现前端路由控制

vue3 使用 Vue Router实现前端路由控制

**在现代Web应用中,前端路由控制是非常重要的一部分。它可以帮助我们将不同的页面内容展示给用户,同时保持用户在浏览不同页面时的连贯性。本文将介绍如何使用Vue Router来实现前端路由控制。
首先,我们需要安装Vue Router。在项目根目录下运行以下命令:
**

npm install vue-router@next

安装完成后,我们可以开始编写代码了。首先,我们需要导入createRoutercreateWebHistory函数,以及我们自定义的视图组件。

import HomeView from '../views/HomeView.vue'
import AdminView from '@/views/AdminView.vue'
import AboutView from '../views/AboutView.vue'
import ChildenList from '@/views/childenList.vue'

接下来,我们需要创建一个路由实例,并配置我们的路由规则。在这个例子中,我们有三个主页面:首页(HomeView)、关于页面(AboutView)和管理员页面(AdminView)。我们还定义了一个子路由(ChildenList),用于显示关于页面下的子页面。

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView
    },
    {
      path: '/about',
      name: 'about',
      children: [  
        {  
          path: 'ChildenList',  
          name: 'ChildenList',  
          component: ChildenList,  
          meta: { requiresAuth: true, role: 'admin' }
        }],
      //  component:AboutView,
    },
    {
      path: '/admin',
      name: 'admin',
      component:AdminView,
      meta: { requiresAuth: true, role: 'admin' }
    }
  ]

为了实现权限控制,我们需要在路由守卫中添加一些逻辑。在每个路由规则中,我们可以添加一个meta属性来指定该路由是否需要认证以及对应的角色。在这个例子中,我们为/about/admin路由设置了requiresAuthrole属性

router.beforeEach((to, from, next) => {
  const user = "name" // 假设这是从localStorage获取用户信息的函数
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // 这个路由需要权限
    if (!user || (to.meta.role && user !== to.meta.role)) {
      // 用户未登录或者角色不匹配
      next({ path: '/about'}) // 重定向到登录页面
    } else {
      // 用户已登录且角色匹配
      next()
    }
  } else {
    // 这个路由不需要权限
    next()
  }
})

最后将router导出

export default router

在main.js/main.ts引入
在这里插入图片描述
最后挂载routerView用于动态渲染与当前活跃路由匹配的组件
在这里插入图片描述


http://www.kler.cn/news/354566.html

相关文章:

  • 【Echarts动态排序图,series使用背景色更新动画,背景底色不同步跟随柱子动画】大家有没有解决方案
  • 遥感技术助力生态系统碳储量、碳收支、碳循环等多领域监测与模拟:森林碳储量,城市扩张,夜间灯光数据,陆地生态系统,大气温室气体监测等
  • 轻量级可视化数据分析报表,分组汇总表!
  • MySQL—关于数据库的CRUD—(增删改查)
  • Vue——Uniapp回到顶部悬浮按钮
  • TS和JS中,string与String的区别
  • 【VUE】Vue中的data属性为什么是一个函数而不是一个对象
  • 机器学习:opencv--光流估计
  • 一文探索RareShop:首个面向消费者的RWA NFT商品发售平台
  • Spring Boot 2.6=>2.7 升级整理
  • 域1:安全与风险管理 第3章(BCP)和第4章(Laws, regulations, and compliance)
  • leaflet(一)初始化地图
  • Mybatis--简略2
  • 树莓派4B-用串口读取JY901S陀螺仪数据
  • JNI是什么
  • vue综合指南(六)
  • 自动化工具:Ansible
  • 基于腾讯云的AI视频课程制作工具
  • 如何在Python中编写自定义上下文管理器?
  • 【AIGC】让AI像人一样思考和使用工具,reAct机制详解