jdk1.8+vue elementui实现多级菜单功能

yizhihongxing

下面我将详细讲解“jdk1.8+vue elementui 实现多级菜单功能”的攻略。

一、准备工作

首先需要安装jdk1.8及以上版本和vue-cli的脚手架工具,具体可以参考相关官方文档。

然后需要在vue项目中安装element-ui组件库,可以使用npm命令进行安装,示例代码如下:

npm install element-ui --save

在main.js文件中引入element-ui的样式文件和组件:

import 'element-ui/lib/theme-chalk/index.css';
import ElementUI from 'element-ui';

Vue.use(ElementUI);

二、实现多级菜单功能

1. 前端路由配置

在router文件夹下的index.js文件中,配置多级路由,示例如下:

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
  }, 
  {
    path: '/about',
    component: About,
    name: 'About',
    children: [
      {
        path: '/',
        name: 'AboutIndex',
        component: AboutIndex,
      },
      {
        path: 'history',
        name: 'History',
        component: History,
      },
      {
        path: 'culture',
        name: 'Culture',
        component: Culture,
      },
    ],
  },
];

通过配置路由,实现多级嵌套的菜单展示。

2. 前端菜单实现

在App.vue文件中使用element-ui的Menu组件来实现菜单的展示,示例代码如下:

<template>
  <div id="app">
    <el-menu class="el-menu-demo" mode="horizontal" :default-active="$route.path">
      <el-menu-item v-for="(item, index) in menu" :key="item.path" :index="item.path" @click="handleMenu(index)">
        {{ item.label }}
      </el-menu-item>
    </el-menu>
    <router-view/>
  </div>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      menu: [
        {
          label: '首页',
          path: '/',
        },
        {
          label: '关于',
          path: '/about',
          children: [
            {
              label: '公司介绍',
              path: '/about',
            },
            {
              label: '公司历史',
              path: '/about/history',
            },
            {
              label: '公司文化',
              path: '/about/culture',
            },
          ],
        },
      ],
    };
  },
  methods: {
    handleMenu(index) {
      this.$router.push(index);
    },
  },
};
</script>

通过使用element-ui的Menu组件和路由配置,实现了多级菜单的展示和跳转功能。

三、示例说明

1. 嵌套路由示例

以公司介绍和公司历史为例,实现嵌套路由效果。在About.vue文件中添加以下代码:

<template>
  <div class="about">
    <el-menu class="el-menu-demo" mode="vertical" :default-active="$route.path">
      <el-submenu v-for="(sub, index) in submenu" :key="sub.path" :index="sub.path">
        <template slot="title">{{ sub.label }}</template>
        <el-menu-item v-for="(item, index) in sub.children" :key="item.path" :index="item.path" @click="handleMenu(item.path)">
          {{ item.label }}
        </el-menu-item>
      </el-submenu>
    </el-menu>
    <div class="about-content">
      <router-view/>
    </div>
  </div>
</template>
<script>
export default {
  name: 'About',
  data() {
    return {
      submenu: [
        {
          label: '公司介绍',
          path: '/about',
          children: [
            {
              label: '公司简介',
              path: '/about',
            },
            {
              label: '公司文化',
              path: '/about/culture',
            },
          ],
        },
        {
          label: '公司历史',
          path: '/about/history',
          children: [
            {
              label: '公司发展史',
              path: '/about/history',
            },
            {
              label: '历史事件',
              path: '/about/history/event',
            },
          ],
        },
      ],
    };
  },
  methods: {
    handleMenu(path) {
      this.$router.push(path);
    },
  },
};
</script>

通过使用element-ui的SubMenu子组件和路由配置,实现了多级嵌套路由的菜单和面包屑导航功能。

2. 动态生成菜单示例

在业务场景中,有时需要根据后端接口返回的数据动态生成菜单。在这种情况下,我们可以在调用接口获取到数据之后,根据数据来动态生成菜单。示例代码如下:

<template>
  <div class="app-container">
    <el-aside>
      <el-menu class="el-menu-vertical-demo" :collapse="isCollapse" unique-opened>
        <el-submenu v-for="(item, index) in menu" :key="item.id" :index="item.id">
          <template slot="title">
            <i :class="`el-icon-${item.icon}`"></i>
            <span v-text="item.name" />
          </template>
          <el-menu-item v-for="(childItem, childIndex) in item.children" :key="childIndex" :index="`${item.id}-${childItem.id}`">
            <span slot="title" @click="handleMenuClick(childItem)">{{childItem.name}}</span>
          </el-menu-item>
        </el-submenu>
      </el-menu>
    </el-aside>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menu: [
        {
          id: 1,
          name: '首页',
          icon: 's-home',
          children: []
        },
        {
          id: 2,
          name: '系统管理',
          icon: 's-tools',
          children: []
        }
      ]
    }
  },
  mounted() {
    // TODO: 调用后端接口获取菜单
    const menuData = [
      {
        id: 1,
        name: '首页',
        icon: 's-home',
        children: []
      },
      {
        id: 2,
        name: '系统管理',
        icon: 's-tools',
        children: [
          {
            id: 21,
            parentId: 2,
            name: '用户管理',
            url: '/user',
            icon: '',
            children: []
          },
          {
            id: 22,
            parentId: 2,
            name: '角色管理',
            url: '/role',
            icon: '',
            children: []
          }
        ]
      }
    ];
    this.menu = menuData;
  },
  methods: {
    handleMenuClick(item) {
      if (item.children.length) return;
      this.$router.push(item.url);
    }
  }
}
</script>

通过调用后端接口获取菜单数据,然后动态生成菜单项和路由,实现了动态生成菜单的功能。

以上就是“jdk1.8+vue elementui 实现多级菜单功能”的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jdk1.8+vue elementui实现多级菜单功能 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript Date setUTCMinutes() 方法

    以下是关于JavaScript Date对象的setUTCMinutes()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的setUTCMinutes()方法 JavaScript的setUTCMinutes()方法设置对象UTC分钟部分。该方法接受一个整数,表示要设置的UTC分钟。如果该参数超出了JavaScript所能表示的范围,…

    JavaScript 2023年5月11日
    00
  • js 数组随机字符串(广告不重复)

    首先需要了解“数组”和“随机数”的概念。 数组 数组是一组按照顺序排列的值的集合。值可以是任何数据类型,如字符串、数字、对象等。在 JavaScript 中,数组用方括号表示 [],并用逗号分隔其中的值。 随机数 随机数是指没有规律可循的随机输出的数字或序列。在 JavaScript 中,可以通过 Math.random() 方法生成一个介于 0 (包括)和…

    JavaScript 2023年5月28日
    00
  • Bootstrapvalidator校验、校验清除重置的实现代码(推荐)

    讲解BootstrapValidator校验、校验清除重置的实现代码需要以下步骤: 1. 引入BootstrapValidator插件库 在HTML文档中,需要先引入BootstrapValidator的插件库,如下所示: <link rel="stylesheet" href="https://cdn.jsdelivr.…

    JavaScript 2023年6月10日
    00
  • 从原生JavaScript到React深入理解

    从原生JavaScript到React深入理解攻略 React是现在前端开发中非常流行的一种框架,很多前端工程师都想学习这个框架。但是,如果你没有掌握原生JavaScript的基础,就很难对React有深入理解。因此,我们需要先从原生JavaScript入手,然后逐渐深入学习React。 1. 学习原生JavaScript 1.1 理解DOM DOM是Doc…

    JavaScript 2023年6月10日
    00
  • js截取字符串的两种方法及区别详解

    当我们需要在JavaScript中处理字符串时,常常需要对字符串进行截取。本篇攻略将会详细讲解js截取字符串的两种方法及其区别。 一、JavaScript中substring()方法 let str = "hello world"; let strNew = str.substring(3); console.log(strNew); 上…

    JavaScript 2023年5月28日
    00
  • 详解android与HTML混合开发总结

    详解 Android 与 HTML 混合开发总结 介绍 本文主要介绍 Android 和 HTML 混合开发的方法和技巧。Android 和 HTML 的混合开发可以将 Web 和 Native 的优势融合在一起,实现复杂的交互操作,同时保证了应用的性能和稳定性。下面详细介绍如何实现 Android 和 HTML 的混合开发。 WebView 构建基础 We…

    JavaScript 2023年6月11日
    00
  • java程序中的延时加载异常及解决方案

    Java程序中的延时加载异常及解决方案 什么是延时加载异常? 在Java程序中,经常会涉及到类的加载和实例化。通过类的加载,Java将.class文件中的字节码转换为JVM可以理解的结构(如Class对象);而实例化则是创建对象实例的过程。 在程序开发中,有时候需要在程序启动时直接加载所需类,但也有一些场景需要进行延时加载,也就是在程序运行时再加载类,这时就…

    JavaScript 2023年5月28日
    00
  • srcElement表格样式

    srcElement 表示事件源对象,即触发该事件的元素。通过该属性,我们可以对事件源对象执行一些操作,比如修改元素的样式等。 在表格中,我们可以利用该属性来修改表格的样式,下面提供两个示例说明。 示例一:通过鼠标悬浮事件修改表格行背景色 <table> <tr> <th>姓名</th> <th>年…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部