Vue3+Element-Plus 实现点击左侧菜单时显示不同内容组件展示在Main区域功能

目录
  • 1.本章目标
  • 2. 如何实现
    • 2.1 通过将左侧菜单列表改造成路由链接的形式来实现
    • 2.2  接下来,监听跳转的路由链接,实现点击二级菜单列表时,在Main 区域展示不同的内容组件
    • 2.3 各组件代码

1.本章目标

1.1 点击不同的菜单列表,可以在右侧 (Main) 主体区域显示不同的组件页面

2. 如何实现

2.1 通过将左侧菜单列表改造成路由链接的形式来实现

1. 首先应该为 Menu (菜单)启用 vue-router 模式 (路由模式),默认是false

Menu 菜单 | Element Plus (gitee.io)https://element-plus.gitee.io/zh-CN/component/menu.html#menu-%E5%B1%9E%E6%80%A7

2. 在 menu 节点中设置 router属性 为true 开启路由模式

小技巧 

  •  如果需要把某个属性的值重置成true,可以对该属性进行简写。
  • 例如 :router="true" 可以简写成 router:router 前面加冒号,代表属性绑定。
  • 必须按照该规则,使用属性时才生效

3. 左侧菜单路由模式开启后,需要设定各页面的跳转地址

页面的跳转地址由服务器提供,例如。

代码改造,每一个二级菜单,应取服务器返回的path 属性做为跳转的唯一值,而不是Id。

 小技巧

由于路由都是以 斜线 (/) 开头,所以取到值后,需要在前面追加斜线

2.2  接下来,监听跳转的路由链接,实现点击二级菜单列表时,在Main 区域展示不同的内容组件

1.首先,第一步应创建各菜单列表链接对应的各内容组件页面。例如,创建一个用户组件页面

2. 监听路由

  • 由于Welcome组件是作为 Home 组件的子路由规则来进行嵌套展示在Main 内容区域的。
  • 所以,左侧菜单的子组件需要展示在 Main 内容区域,那么左侧菜单的子组件(二级菜单)也需要嵌套在Home 组件里面作为Home 组件的 子路由规则进行展示在 Main 区域。

3. 最终效果

2.3 各组件代码

1. 路由规则 index.js

import { createRouter, createWebHashHistory } from 'vue-router'
import Login from '../components/Login.vue'
import Home from '../components/Home.vue'
import Welcome from '../components/Welcome.vue'
import Users from '../components/user/Users.vue'
const routes = [
  {
    path: '/',
    redirect: '/login'
  },
  {
    path: '/login',
    component: Login
  },
  {
    path: '/home',
    component: Home,
    redirect: '/welcome',
    children: [
      { path: '/welcome', component: Welcome },
      { path: '/users', component: Users }
    ]
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
  if (to.path === '/login') return next()
  // 获取token
  const tokenStr = window.sessionStorage.getItem('token')
  if (!tokenStr) return next('/login')
  next()
})

export default router

2. Home.vue 组件

<template>
  <el-container class="home_container">
    <!-- 头部区域 -->
    <el-header>
      <div>
        <img src="../assets/heima.png" alt="" />
        <span>电商后台管理系统</span>
      </div>
      <el-button type="info" @click="logout">退出</el-button>
    </el-header>
    <!-- 页面主体区域 -->
    <el-container>
      <!-- 侧边栏 -->
      <el-aside :width="isCollapse ? '64px':'200px'">
        <div class="toggle-button" @click="toggleCollapse">|||</div>
        <!-- 侧边栏菜单区域 -->
        <el-menu active-text-color="#409Eff"
        background-color="#545c64"
        text-color="#fff" unique-opened
        :collapse="isCollapse" :collapse-transition="false"
        :router="true">
        <!-- 一级菜单 -->
        <el-submenu :index="item.id+''" v-for="item in menulist" :key="item.id">
          <!-- 一级菜单模板区域 -->
          <template #title>
            <el-icon :class="iconsObj[item.id]"></el-icon>
            <span>{{item.authName}}</span>
          </template>
          <!-- 二级菜单 -->
          <el-menu-item :index="'/'+subItem.path" v-for="subItem in item.children" :key="subItem.id">
          <template #title>
            <el-icon><iconMenu /></el-icon>
            <span>{{subItem.authName}}</span>
          </template>
          </el-menu-item>
        </el-submenu>
      </el-menu>
      </el-aside>
      <!-- 右侧内容主体区域 -->
      <el-main>
        <!-- 路由占位符 -->
        <router-view></router-view>
      </el-main>
    </el-container>
  </el-container>
</template>
<script>
export default {
  data () {
    return {
      // 左侧菜单数据对象
      menulist: [],
      // 字体图标对象
      iconsObj: {
        125: 'iconfont icon-users',
        103: 'iconfont icon-tijikongjian',
        101: 'iconfont icon-shangpin',
        102: 'iconfont icon-danju',
        145: 'iconfont icon-baobiao'
      },
      // 是否折叠
      isCollapse: false
    }
  },
  created () {
    this.getMenuList()
  },
  methods: {
    logout () {
      window.sessionStorage.clear()
      this.$router.push('/login')
    },
    // 获取所有的菜单数据
    async  getMenuList () {
      const { data: res } = await this.$http.get('menus')
      if (res.meta.status !== 200) return this.$message.error(res.meta.msg)
      // 成功了,进行赋值
      this.menulist = res.data
      console.log(res)
    },
    // 点击按钮,切换菜单的折叠与展开
    toggleCollapse () {
      this.isCollapse = !this.isCollapse
    }
  }
}
</script>
<style lang="less" scoped>
.home_container {
  height: 100%;
}
.el-header {
  background-color: #363d40;
  // 给头部设置一下弹性布局
  display: flex;
  // 让它贴标左右对齐
  justify-content: space-between;
  // 清空图片左侧padding
  padding-left: 0;
  // 按钮居中
  align-items: center;
  // 文本颜色
  color: #fff;
  // 设置文本字体大小
  font-size: 20px;
  // 嵌套
  > div {
    // 弹性布局
    display: flex;
    // 纵向上居中对齐
    align-items: center;
    // 给文本和图片添加间距,使用类选择器
    span {
      margin-left: 15px;
    }
  }
}
.el-aside {
  background-color: #313743;
  .el-menu {
    border-right: none;
  }
}
.el-main {
  background-color: #e9edf1;
}
.iconfont{
  margin-right: 10px;
}
.toggle-button{
 // 添加背景颜色
 background-color: #4A5064;
 // 设置文本大小
 font-size:10px;
 // 设置文本行高
 line-height:24px;
 // 设置文本颜色
 color:#fff;
 // 设置文本居中
 text-align: center;
 // 设置文本间距
 letter-spacing: 0.2em;
 // 设置鼠标悬浮变小手效果
 cursor:pointer;
}
</style>

3. Users.vue 组件

<template>
  <div>
    <h3>用户列表组件</h3>
  </div>
</template>

<script>
export default {

}
</script>

<style lang="less" scoped>

</style>

到此这篇关于Vue3+Element-Plus 实现点击左侧菜单时显示不同内容组件展示在Main区域功能的文章就介绍到这了,更多相关Vue3+Element-Plus点击左侧菜单显示不同内容组件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • element plus的样式修改和扩展实例

    目录 一.用户故事 二.需求分析 三.需求实现 一.用户故事 我们开发了一个业务组件库.业务组件库是需要基于公司内部的一个UI组件库.而公司的UI组件库又出“基于”element ui的. 公司的UI组件库是对element ui的主题色进行了修改,并且也对于一些组件进行了扩展.可惜的是,由于他们的版本是vu2版本.我们的业务组件库是vue3的element plus的版本. 二.需求分析 实现形式的考虑 续期的扩展 三.需求实现 主题色的改变 组件样式的扩展 element plus对于各种函

  • Nuxt3项目搭建过程(Nuxt3+element-plus+scss详细步骤)

    目录 1. Nuxt3的安装 1.1. 安装新建Nuxt3 项目 1.2. Nuxt3的启动使用 1.3. Nuxt3 运行端口 2. element-plus的安装配置 2.1. 演示使用 3. scss安装和全局变量配置 3.1. 使用 3.2. 外部导入使用 3.3. 全局配置使用 4. 拓展:Corepack 自动装载 pnpm 小聊: 本次记录一次使用Nuxt3搭建前端项目的过程,内容包含Nuxt3的安装,基于Vite脚手架(默认)构建的vue3项目,element-plus的安装配置

  • Element-ui/Element-plus Vue报错问题及解决

    目录 element-ui前端组件 element-plus前端组件 vue-ui安装方式 总结 这篇主要是解决在Vue3.0版本中遇到的element-ui失效报错的问题 element-ui前端组件 一套为开发者.设计师和产品经理准备的基于Vue2.0的桌面端组件库,注意,是Vue2.0 安装文档:https://element.eleme.cn/#/zh-CN/component/installation 这样,问题就来了,在Vue3.0中,element-ui会失效甚至报错 并且官方文档

  • Element Plus的el-tree-select组件懒加载+数据回显详解

    目录 一.背景说明 二.使用 1. dom 2.methods 三.回显 总结 一.背景说明 技术:Vue3 + Element Plus 需求:在选择组织机构时以树结构下拉展示. 用到组件:TreeSelect 树形选择组件(el-tree-select) 官网文档地址: https://element-plus.gitee.io/zh-CN/component/tree-select.html https://element-plus.gitee.io/zh-CN/component/tre

  • Element-Plus el-col、el-row快速布局及使用方法

    目录 前言 一.el-col span push & pull 响应式 offset 二.el-row gutter justify align 总结 前言 拖拉了一晚, 总结了一些Layout布局工具的使用方法. 一.el-col 本来打算先说row的… 写完看了一遍感觉还是换过来的好(捂脸).el-col是el-row的子元素. 在el-row添加 style="flex-direction: column;" 可以实现纵向排列el-col, 在需要纵向布局时可以使用, 横

  • Vue3+Element-Plus 实现点击左侧菜单时显示不同内容组件展示在Main区域功能

    目录 1.本章目标 2. 如何实现 2.1 通过将左侧菜单列表改造成路由链接的形式来实现 2.2  接下来,监听跳转的路由链接,实现点击二级菜单列表时,在Main 区域展示不同的内容组件 2.3 各组件代码 1.本章目标 1.1 点击不同的菜单列表,可以在右侧 (Main) 主体区域显示不同的组件页面 2. 如何实现 2.1 通过将左侧菜单列表改造成路由链接的形式来实现 1. 首先应该为 Menu (菜单)启用 vue-router 模式 (路由模式),默认是false Menu 菜单 | El

  • Element框架el-tab点击标签页时再渲染问题的解决

    之前一直以为这种标签页加载时要么同时渲染,加载所有页面:要么通过el-tab的@tab-click事件,通过判断tab.name选择加载.但是后者有两个弊端:(1)页面仍然一下子渲染,向后台请求许多接口,造成页面加载缓慢,无法实现实时渲染的效果(2)不能解决父子组件数据传递的问题) 1. 父子组件数据传递问题: <!--父组件--> <el-tabs v-model="activeName" @tab-click="handleClick">

  • iframe异步加载实现点击左边菜单加载右边内容实例讲解

    关于iframe异步加载,我们常用的大都是左边菜单栏右边是内容页面,要求我们不能左边菜单不能刷新的情况下,异步加载右边的内容页面. 话不多说,做了一个实例大致是这样的: 1.首先在你的项目中建立三个文件如: 2.在Default页面引入jquery文件并在body中加入也下代码: 复制代码 代码如下: <div style="width: 20%; float: left"> <div id="butten" style="cursor:

  • Vue3+Element-Plus实现左侧菜单折叠与展开功能示例

    目录 1.最终实现的效果图 2.  实现左侧菜单折叠与展开功能步骤 2.1 首先应该在菜单顶部放一个折叠展开的按钮条 2.2 接下来,画按钮条UI结构,实现折叠与展开功能 2.3  实现点击该DIV时,触发菜单折叠与展开 2.4  折叠与展开功能是实现了,但是背景颜色并没有随着菜单折叠时跟着变小或展开时跟着变大 2.5. 最终效果 3. Home.vue 代码 1.最终实现的效果图 2.  实现左侧菜单折叠与展开功能步骤 2.1 首先应该在菜单顶部放一个折叠展开的按钮条 2.2 接下来,画按钮条

  • JS实现左侧菜单工具栏

    本文实例为大家分享了JS实现左侧菜单工具栏的具体代码,供大家参考,具体内容如下 摘要 该js脚本可帮助你快速实现左侧菜单工具栏.通过js封装成一个方法类,直接new该对象即可快速生成左侧菜单工具栏. 一.效果展示 二.menu.js文件 (1)WenMenuNode节点 let WenMenuNode = function ({                                 text,                                 wenMenu,      

  • Android界面设计(APP设计趋势 左侧隐藏菜单右边显示content)

    相关文章android popwindow实现左侧弹出菜单层http://www.jb51.net/article/33533.htm 移动App设计的13大精髓http://www.jb51.net/article/33534.htm 这文章讲述了2013年未来的移动APP设计趋势,感觉挺有道理的.wp8的平面界面设计已经取得很大的成功,很多应用也都是采取相同的设计如zaker,还有类似本文要展示的左侧导航菜单右边显示主要内容的设计,通过menu菜单或者左右拖动可以弹出左侧导航菜单,国内的应用

  • JS实现点击参数面板按钮显示或隐藏数据

    当报表中列出数据太多时,想通过显示按钮隐藏明细数据只显示统计数据.如下图示例,那么该如何实现呢?本文以FineReport为例,来讲述JS如何实现点击参数面板按钮显示或隐藏数据. 打开报表 在参数面板添加一个标签控件,控件名为lable,设置标签控件不可见,控件值为"显示". 在参数面板添加一个按钮控件,控件名为button,控件值为"只显示合计数据",并添加点击事件. 编辑点击事件,添加下面的JavaScript代码: 点击参数面板空白处,将"点击查询前

  • layui实现左侧菜单点击右侧内容区显示

    layui这个前端框架对后端人员来说提供了极大的方便,很大一部分同学在刚接触到这个框架就迫不及待的要动手实践了,刚好最近需要开发一个后台管理项目,就拿layui来进行学习和实践. 还没有接触到的同学可以先通读一遍文档,这样在遇到问题的时候才能够对症下药,仔细研究相关的板块 今天我们先来学习一下使用layui来实现左侧点击菜单,内容区显示tab 实验效果 实现过程 html代码 <!DOCTYPE html> <html lang="en"> <head&g

  • 基于jquery实现后台左侧菜单点击上下滑动显示

    今天做了一个左侧菜单的效果,做后台的时候应该会经常用到这个效果的,代码同样是简洁明了,复制即可用:效果图如下: 代码如下:(这个上下箭头的图标如上,图标可自己换) 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>后台左侧

  • vue element 生成无线级左侧菜单的实现代码

    首先来总结element ui 官方文档的左侧菜单结构,带有el-submenu为子级节点,el-menu-item表示没有下级.当然,菜单不能写死,因为菜单也许不止两级,所以我们需要递归来实现.根据当前节点是否有下级去判断,如果有下级,则继续调用子级,直到没有下级为止,下面我贴上左侧菜单所有的代码: 请求数据格式 [ { name: "首页", id: -1, icon: "el-icon-picture-outline-round", url: "/i

随机推荐