vue3+Element-plus 动态路由配置

2023-11-05

使用vue3 + Element-plus 进行动态路由配置

首先来看一下路由结构 免得出现疑惑

const routes = [
  {
    path: '/login',
    name: 'Login',
    meta: { title: '登录页面' },
    component: () => import('@/views/Login')
  },
  {
    path: '/',
    name: 'Common',
    component: () => import('@/views/Common'),
    meta: { title: '首页' },
    redirect: { path: '/homepage' },
    children: [
      {
        path: '/homepage',
        component: () => import('@/views/home/HomePage'),
        name: '首页',
        meta: {
          title: '首页',
        },
      },
      {
        path: '/Setting',
        component: () => import('@/views/Setting/Setting'),
        name: '用户中心',
        meta: {
          title: '用户中心',
          sidebar: [
            { id:0, name: '部门管理', path: '/Setting/Department' },
            { id:1, name: '用户管理', path: '/Setting/Role' },
          ]
        },
        redirect: { path: '/Setting/Department' },
        children: [
          {
            path: '/Setting/Department',
            component: () => import('@/views/Setting/Department'),
            name: '用户中心/部门管理',
            meta: {
              title: '部门管理',
            },
          },
          {
            path: '/Setting/Role',
            component: () => import('@/views/Setting/Role'),
            name: '用户中心/角色管理',
            meta: {
              title: '角色管理',
            },
          },
        ]
      },
    ],
  },
]

使用element-plus的Menu 菜单 在下面介绍如何配置

动态主路由配置

<template>
    <el-menu :default-active="activeIndex" :router="true"
        :ellipsis="false" class="el-menu-demo" mode="horizontal" 
        background-color='rgba(128,147,255)'
        text-color='#ffffff' active-text-color='rgba(128,147,255)'>
        <el-menu-item v-for="(i,item) in $route.matched[0].children" :key="item" :index = i.path>{{i.name}}</el-menu-item>
    </el-menu>
</template>

<script>

import {useRoute} from 'vue-router'
import { ref } from 'vue'

export default{
    setup(){
        const activeIndex = ref('')
        const route = useRoute()
        const sesson = window.sessionStorage
        sesson.Hearderpath = '/' + route.path.split('/')[1].toLowerCase()
        activeIndex.value = sesson.Hearderpath
        return{ route ,activeIndex ,}
    }
}
 
</script>

使用 $route 获取到路由信息进行循环 这块比较简单一点
接下来就比较重要了

如何进行跳转到指定页面 如何显示高亮部分 如何刷新之后高亮部分不会消失或者匹配错误

进行路由跳转可以用el-menu-item 中的属性 index 绑定循环路由信息中的path 但是要在el-menu上 使用 :router=true来开启路由模式 就可以做到路由跳转

:default-active=“activeIndex” 这个属性就是用来做高亮显示的

<script>

import {useRoute} from 'vue-router'
import { ref } from 'vue'

export default{
    setup(){
        const activeIndex = ref('')
        const route = useRoute()
        // 现在做的是主路由跳转  循环的是主路由
        // 而带子路由的页面 会默认一个子页面作为默认显示的
        // 这就导致路面显示的路由是子路由的页面 而不是主路由了
        // 相当于 循环的是 /homepage和/Setting
        // 而/Setting带子路由 所以进去之后看到的是子路由的页面 路径就是/Setting/Department
        // 这样就会造成路径不匹配 导致高亮显示部分刷新之后就会消失或者匹配错误
        const sesson = window.sessionStorage
        sesson.Hearderpath = '/' + route.path.split('/')[1].toLowerCase()//对子路由进行处理 只匹配主路由的path
        activeIndex.value = sesson.Hearderpath //刷新之后取到session中存储的path就可以做到高亮显示
        return{ route ,activeIndex ,}
    }
}
 
</script>

这样就可以做到高亮显示 刷新不会匹配错误或者消失

侧边栏动态子路由配置

这个就比较简单一点了

<template>
    <div>
        <el-menu :default-active="activeIndex" class="el-menu-vertical-demo" :router="true">
            <el-menu-item v-for="i in $route.meta.sidebar" :key="i.id" :index="i.path" > 
                <span>{{i.name}}</span>
            </el-menu-item>
        </el-menu>
    </div>
</template>

<script>
import { ref } from "vue"
import { useRoute } from "vue-router";

export default{
    setup(){
        const activeIndex = ref('')
        const route = useRoute()
        // 因为这次是匹配的子路由 所以不需要做处理 
        activeIndex.value = route.path
        return{ activeIndex, route}
    }
}
</script>

成品展示

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3+Element-plus 动态路由配置 的相关文章

  • OpenGL学习 跟着官网教程学习(深度测试)

    1 深度测试是什么 在默认情况是将需要绘制的新像素的z值与深度缓冲区中对应位置的z值进行比较 如果比深度缓存中的值小 那么用新像素的颜色值更新帧缓存中对应像素的颜色值 2 深度测试开启 glEnable GL DEPTH TEST 3 什么

随机推荐

  • 如何将代码托管到Github上

    如何将代码托管到Github上 1 首先你得注册一个GitHub的账号 只有这样才能使用代码托管功能 官方网址 注册流程暂不阐述 https github com 2 点击 New 创建一个新的项目 3 填写项目相关信息 4 创建完成之后
  • 修改Anaconda镜像源

    修改Anaconda镜像源 这里采用阿里云的镜像源 因为最近清华的镜像源不稳定 1 找到 condarc文件 Linux MacOS用户可以通过修改用户目录下的 condarc 文件 一般路径为 condarc Windows 用户无法直接
  • 【类与对象】详述类(封装)

    目录 前言 类 成员变量 成员方法 方法重载Overload 可变参数 构造方法 对象的创建 this关键字 包 访问修饰符 番外 基本类型的封装 var局部变量 对象数组 前言 Java是一种面向对象语言 面向对象编程主要体现在封装性 继
  • java面向对象练习题

    1 定义一个Father和Child类 并进行测试 要求如下 1 Father类为外部类 类中定义一个私有的String类型的属性name name的值为 zhangjun 2 Child类为Father类的内部类 其中定义一个introF
  • QT部件基类——QWidget与QDialog

    一 默认基类 QT提供的默认部件基类包括QMainWindow QWidget 和QDialog这三种 这三个部件基类也是用的最多的 QWidget类是所有部件对象的基类 被称为基础窗口部件 继承关系详看QWidget类关系图 QWidge
  • 大于0的正整数正则表达式_常用的正则表达式,快来看看吧~

    这是我做项目经常需要用的正则表达式 整理了一下 经度 0 d 1 2 d 1 6 1 0 7 d 1 d 1 6 180 0 1 6 纬度 0 8 d 1 d 1 6 90 0 1 6 电话和手机号 d 3 4 d 7 8 1d 10 手机
  • Qt5.8.0安装教程

    系统 WIN7 32位和64位都有安装 下载地址 http download qt io archive qt 或者 http download qt io new archive qt 安装QT需要注册 注册需要使用邮箱 网页选中中文语言
  • 2021前端笔试题

    笔试重点 查漏补缺 JavaScript题1 https github com lydiahallie javascript questions blob master zh CN README zh CN md JavaScript题2
  • linux系统中更新包管理卡死解决

    文章目录 基于的发行版 问题 解决方案 链接ssh 处理包更新 更改包管理下载源 清理apt缓存 更新apt包 基于的发行版 Ubuntu 20 04 问题 安装完成之后 包管理没有更新 很多仓库都是旧的 此时有些包可能找不见 所以在使用之
  • 问题:ifconfig命令给网卡指定mac地址

    问题 服务器在进行重启操作后mac地址发生了改变 与业务绑定的mac地址不匹配导致业务无法启动 解决办法 1 ifconfig 先看下mac地址和网卡名称 2 ifconfig bond0 hw ether mac地址 解释 ifconfi
  • CTF_ctfshow_登录就有flag

    打开靶机是一个登录界面 试了一下普通的sql注入 1 or 1 1 不行 所以这里用 0 分号可以用于闭合 井号可以用于注释 进行异或运算 等号就是判等 这里需要利用sql的一个点 mysql弱类型转换 空异或0会查到所有非数字开头的记录
  • Transformers库学习-part1

    文章目录 C0 Setup C1 Transformers models Working with pipelines Zero shot classification How do Transformers work Transforme
  • python 学习笔记(三)---turtle库的使用(超详细)

    python 学习笔记 三 turtle库的使用 文章目录 python 学习笔记 三 turtle库的使用 1 turtle库的简介 2 turtle绘图窗体布局 3 turtle的空间坐标体系 绝对坐标和海龟坐标 4 turtle的角度
  • 决策树和信息增益的理解

    决策树 通俗来说 决策树分类的思想类似于找对象 现想象一个女孩的母亲要给这个女孩介绍男朋友 于是有了下面的对话 女儿 多大年纪了 母亲 26 女儿 长的帅不帅 母亲 挺帅的 女儿 收入高不 母亲 不算很高 中等情况 女儿 是公务员不 母亲
  • 【模板】二维前缀和与二维差分

    文章目录 1 二维前缀和 1 1 求解二维前缀和数组 1 2 区间查询 2 二维差分 2 1 定义 2 2 区间修改 2 3 初始化 前缀和是一种极其优秀的线性结构 也是一种重要的思想 能极大地降低区间查询的时间复杂度 为了方便 涉及到前缀
  • GitLab服务器IP地址设置

    最近使用GitLab 搭建了Git的私有仓库 但是发现私有仓库的地址居然是localhost 不是本机的IP地址 最后百度了一下 找了很久才找到 特此记录一下 首先说明一下 我linux虚拟机的IP地址是192 168 142 134 1
  • PO和PM的区别

    PO是product owner 是一个role 负责与stakeholders打交道 提炼stakeholders的需求 按照需求的价值以及紧急程度安排优先级 PO是一个角色 对product backlog负责 通俗地讲 product
  • uniapp中位置授权提示

    前言 因项目的需求 需要 首次登录小程序的用户 一进来就显示一个弹窗 提示 点击允许打印的结果 官网地址 uni getSetting 获取用户的当前设置 出现弹窗的原因是因为使用 了 uni authorize 这个属性 还需要在 man
  • 数据库(DDL)

    数据库 一 数据库类型 1 关系型数据库 Oracle 银行 政府 MySQL 最广泛 2 非关系型数据库 redis mongodb 二 数据库的核心元素 1 sql 关系型的数据库语言 结构化查询语言 2 Mysql 具体的数据库 3
  • vue3+Element-plus 动态路由配置

    使用vue3 Element plus 进行动态路由配置 首先来看一下路由结构 免得出现疑惑 const routes path login name Login meta title 登录页面 component gt import vi