Vue2+ElementUI实现无限级菜单

        使用Vue2和ElementUI实现无限级菜单,通常菜单数据以树形结构存储,每个菜单包含多个子菜单 ,子菜单又可以继续包含更深层次的子菜单项。所以,需要使用递归形式,完成子项菜单的渲染。

        这里,结合Element UI界面的el-menu和el-submenu组件来构建菜单结构,有子菜单时使用el-submenu,否则使用el-menu-item。可以通过自定义组件对Element-UI菜单组件递归渲染,也可以使用Vue的render方法完成Element-UI的菜单组件的渲染,通过render函数方式可以使用JavaScript代码来完成布局和结构。

        render函数是Vue组件的一个方法,用于返回一个虚拟节点(VNode)结构,该结构将被转换为真实的DOM元素。

一、安装

        vue2的安装之前已有一篇文章介绍过,不清楚朋友可以前去了解,地址:Vue.js快速入门之一:安装和配置_vue 安装 js-storage-CSDN博客。

1.1 vue-cli全局安装

npm install -g vue-cli

1.2 初始化项目

vue init webpack projectName

1.3 执行命令

        打开git bash,输入命令创建项目,命令代码如下:

Administrator@PC-20240224TOYL MINGW64 /d/workspace/vue
$ vue init webpack vue2element-nav

? Project name vue2element-nav
? Project description A Vue.js project
? Author 作者名称 <邮箱地址.qq.com>
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recom
mended) npm

        执行完毕后,如下图所示,表示已完成项目的创建和初始化。

Vue2+ElementUI实现无限级菜单_第1张图片

        通过上述提示命令,运行项目。

二、安装Element-UI

        Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。官网地址:Element - The world's most popular Vue UI framework。

2.1 安装

npm i -s element-ui

2.2 使用

        打开main.js文件,引入Element UI组件。代码如下:

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
 
Vue.use(ElementUI);

三、模拟数据

        这里先使用模拟数据完成无限级菜单的实现,在项目src目录下创建data文件夹,并新建nav.js文件,用于存储模拟数据。如下图:

Vue2+ElementUI实现无限级菜单_第2张图片

3.1 json数据        

        打开创建好的文件src/data/nav.js,将模拟数据贴入即可, 代码如下:

/**
 * 模拟数据
 */
const dataList = [
  {
    "name": "网络安全渗透工程师体系大纲",
    "pid": 0,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 1
  },
  {
    "name": "WEB通信、前后端原理",
    "pid": 1,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 2
  },
  {
    "name": "信息收集",
    "pid": 1,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 3
  },
  {
    "name": "注入全方位利用+数据库注入",
    "pid": 1,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 4
  },
  {
    "name": "前端渗透、文件上传解析漏洞",
    "pid": 1,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 5
  },
  {
    "name": "漏洞利用",
    "pid": 1,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 6
  },
  {
    "name": "漏洞挖掘",
    "pid": 1,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 7
  },
  {
    "name": "Web服务器通信原理",
    "pid": 2,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 8
  },
  {
    "name": "后端基础SQL",
    "pid": 2,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 9
  },
  {
    "name": "数据库简介及SQL语法",
    "pid": 2,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 10
  },
  {
    "name": "后端基础SQL高级查询与子查询",
    "pid": 2,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 11
  },
  {
    "name": "后端基础PHP简介及基本函数上",
    "pid": 2,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 12
  },
  {
    "name": "后端基础PHP—表单验证",
    "pid": 2,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 13
  },
  {
    "name": "正则表达式",
    "pid": 2,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 14
  },
  {
    "name": "信息搜集的意义 — 渗透测试的灵魂",
    "pid": 3,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 15
  },
  {
    "name": "信息收集(一)",
    "pid": 3,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 16
  },
  {
    "name": "网络架构-信息收集",
    "pid": 3,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 17
  },
  {
    "name": "前端-信息收集",
    "pid": 3,
    "createtime": "2023-03-29",
    "updatetime": "2023-03-29",
    "id": 18
  },
  {
    "name": "系统-信息收集",
    "pid": 3,

你可能感兴趣的:(Vue.js,elementui,前端,javascript,vue)