vue3.0+element Plus实现页面布局侧边栏菜单路由跳转功能

 更新时间:2023年07月18日 10:45:12   作者:欢喜~999  
这篇文章主要介绍了vue3.0+element Plus实现页面布局,侧边栏菜单路由跳转,需要的朋友可以参考下

一. 先在router.js文件中配置路由,将侧边栏中需要跳转的页面都添加到children中

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: "/project",
      name: "projectGroup",
      meta: {
        requiresAuth: true,
        title: "项目列表",
        navBreadcrumb: [
          { label: "项目列表", name: "projectSample", link: true },
        ],
      },
      component: () => import("../views/project/Index.vue"),
      children: [
        {
          path: "sample/:id",
          name: "projectGroup:sample",
          meta: {
            requiresAuth: true,
            title: "项目列表",
            navBreadcrumb: [
              { label: "项目列表", name: "projectSample", link: true },
            ],
          },
          component: () => import("../views/project/Sample.vue"),
        },
        {
          path: "alg/:id",
          name: "projectGroup:alg",
          meta: {
            requiresAuth: true,
            title: "项目列表",
            navBreadcrumb: [
              { label: "项目列表", name: "projectSample", link: true },
            ],
          },
          component: () => import("../views/project/Alg.vue"),
        },
      ],
    },
  ],
});

二. 在view目录下新建一个文件,里面包含侧边栏要跳转的页面

三.  页面样式布局

1. 我选择使用自定义组件BaseLayout.vue文件来设置header和aside样式显示

<template>
  <el-config-provider namespace="ep" :locale="zhCn">
//BaseHeader是我自己的定义的组件,为当前页面的头部
    <div class="top-header">
      <BaseHeader />
      <div>
        <user-avatar />
      </div>
    </div>
    <div class="app-main" v-if="userInfo !== null">
//BaseSide 自定义组件,为当前页面的侧边栏
      <div class="base-side-main" v-if="props.hasBaseSide"><BaseSide /></div>
      <div
        :class="['content-main', mainClass]"
        :style="{ left: props.hasBaseSide ? '64px' : '0' }"
      >
        <slot></slot>
      </div>
    </div>
  </el-config-provider>
</template>

也可以使用element plus中的Container 布局容器 

 2. BaseHeader.vue文件里面为页面头部样式,头部样式相对简单

<template>
  <div class="top-nav-bar">
    <div class="app-title">
      <router-link :to="{ name: 'home' }"> 病理图像AI自训练中台 </router-link
      ><el-tag
        effect="dark"
        type="danger"
        style="margin-left: 10px"
        v-if="envMode === 'test'"
      >
        测试版
      </el-tag>
    </div>
    <el-menu
      class="el-menu-bar"
      mode="horizontal"
      :ellipsis="false"
      :defaultActive="menuActive"
    >
      <el-menu-item index="3" @click="goPage('/dashboard')"
        >控制台</el-menu-item
      >
      <el-menu-item index="1" @click="goPage('/alg')">我的算法</el-menu-item>
      <el-menu-item index="2" @click="goPage('/market')">应用市场</el-menu-item>
      <el-menu-item index="4" @click="goPage('/project')"
        >项目列表</el-menu-item
      >
    </el-menu>
  </div>
</template>

3. BaseSide.vue文件里面是侧边栏样式,这里是重点!!!这里进行页面路由跳转设置

<template>
  <el-menu
    class="el-menu-vertical-demo"
    @open="handleOpen"
    @close="handleClose"
  >
    <div v-for="i in listProject?.ListProjectByTenant" :key="i.id">
//因为我的侧边栏数据是需要动态获取的,所以这里的index不能相同,否则几个侧边栏会同时展开时
      <el-sub-menu :index="i">
        <template #title>{{ i.name }}</template>
        <el-menu-item index="alg">
//这里使用<router-link>,通过属性to来进行跳转,里面的name就是刚才在router.js文件中设置的,params这里包含的是路由跳转时传递的参数
          <router-link
            :to="{
              name: 'projectGroup:alg',
              params: { id: i.id, name: i.name },
            }"
            >算法</router-link
          >
        </el-menu-item>
        <el-menu-item index="sample"
          ><router-link
            :to="{
              name: 'projectGroup:sample',
              params: { id: i.id, name: i.name },
            }"
            >样本</router-link
          ></el-menu-item
        >
      </el-sub-menu>
    </div>
  </el-menu>
</template>

四. index.vue文件中引入刚才的组件

<template>
//因为我的数据是动态获取,所以要先判断一下是否有数据,有数据再显示侧边栏
  <BaseLayout :hasBaseSide="isProjectLoaded && projectListData.length">
    <PaddingLayout>
      <el-card class="table-card" shadow="never">
        <router-view></router-view>
      </el-card>
    </PaddingLayout>
  </AlgProjectLayout>
</template>

样式如下:

到此这篇关于vue3.0+element Plus实现页面布局侧边栏菜单路由跳转功能的文章就介绍到这了,更多相关vue3.0 element Plus侧边栏菜单路由跳转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)

    vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)

    为了提高页面展示效果,登录界面内容比较单一的,粒子效果作为背景经常使用到,vue工程中利用vue-particles可以很简单的实现页面的粒子背景效果,本文给大家分享在实现过程中遇到问题,需要的朋友一起看看吧
    2020-02-02
  • Vue Element Sortablejs实现表格列的拖拽案例详解

    Vue Element Sortablejs实现表格列的拖拽案例详解

    这篇文章主要介绍了Vue Element Sortablejs实现表格列的拖拽案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Vue条件渲染之v-if、v-else-if、v-else的完整指南

    Vue条件渲染之v-if、v-else-if、v-else的完整指南

    v-if和v-else是Vue.js中的控制指令,用于条件性地渲染一块内容,这些内容只会在指令表达式返回真值时才会渲染,这篇文章主要介绍了Vue条件渲染之v-if、v-else-if、v-else的完整指南,需要的朋友可以参考下
    2026-03-03
  • vue中各组件之间传递数据的方法示例

    vue中各组件之间传递数据的方法示例

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据。必须使用特定的方法才能实现组件之间的数据传递。下面这篇文章主要给大家介绍了关于vue中各组件之间传递数据的方法示例,需要的朋友可以参考学习。
    2017-07-07
  • Vue使用路由钩子拦截器beforeEach和afterEach监听路由

    Vue使用路由钩子拦截器beforeEach和afterEach监听路由

    这篇文章主要介绍了Vue使用路由钩子拦截器beforeEach和afterEach监听路由,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 一篇文章学会Vue中间件管道

    一篇文章学会Vue中间件管道

    这篇文章主要给大家介绍了如何通过一篇文章学会Vue中间件管道的相关资料,什么是中间件管道?中间件管道是一堆不同的中间件并行运行,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-06-06
  • 解决el-dialog与el-tabs一起用卡死的问题

    解决el-dialog与el-tabs一起用卡死的问题

    在el-dialog中嵌入el-tabs和el-transfer时,关闭dialog会导致浏览器卡死,通过排查发现是destroy-on-close属性和el-tabs冲突导致的,解决方法是去掉destroy-on-close属性或给el-tabs添加v-if
    2026-01-01
  • Vue3中导航守卫结合Axios实现token认证机制

    Vue3中导航守卫结合Axios实现token认证机制

    本文主要介绍了Vue3中导航守卫结合Axios实现token认证机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Vue结合SignalR实现前后端实时消息同步

    Vue结合SignalR实现前后端实时消息同步

    这篇文章主要为大家详细介绍了Vue结合SignalR实现前后端实时消息同步,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 使用Vue实现防篡改的水印

    使用Vue实现防篡改的水印

    我们在平时上网的时候会看到有些图片是加水印的,一般水印往往是后端来做的,不过有些站点要保护的知识产权类型比较多,不光是图片,可能还有视频或者文字,所以我们水印的作用,就是给他做一个适当的限制,本文就给大家介绍一下如何使用Vue实现防篡改的水印
    2023-08-08

最新评论