VUE中动态菜单的递归实现

来源 :科学与财富 | 被引量 : 0次 | 上传用户:dindin
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:前端開发是系统的脸面,国内开源JS框架VUE表现优异,很多前端开发者都采用它来实现业务系统界面。本篇文章来源于开发实战,如何实现一个精致、可拓展动态菜单,并阐述了开发思路、开发技术,展示了精炼后的核心代码,以期为前端开发者提供开发思路,共同集思广益。
  关键词:VUE,vue-router,菜单,递归实现
  VUE作为国产优秀的构建用户界面的渐进式JS框架,它是以数据驱动和组件化的思想构建的。VUE与国外类似的框架相比,提供了更加简洁的API,能很快地上手,是创建项目的首选前端框架。
  笔者在为某政府机关开发一套小型业务系统,采用VUE作为前端框架,且采用了vue-router路由组件、vuex数据组件,主体上使用蚂蚁金服的ant design vue作为界面实现的组件库。采用的业务系统非常流行的顶部-侧边-通栏布局,感觉其中的难点在于菜单的实现,因为各个用户因角色身份的不同,我们希望实现与其权限所对应的菜单,由此必须通过AJAX技术动态从服务端取得动态菜单条目,并填充到界面中。假定通过axios从后端取得如下JSON菜单数据:
  "routes": [
  "path": "/",
  "component": () =>
  import(/* webpackChunkName: "layout" */ "./layouts/BasicLayout"),
  "children": [
  {
  "path": "/",
  "redirect": "/dashboard/analysis"
  },
  {
  "path": "/dashboard",
  "name": "dashboard",
  "meta": {
  "icon": "dashboard",
  "title": "仪表盘",
  "authority": ["admin", "user"]
  },
  }
  ...
  很明显,是在后端开发时根据用户不同,生成不同的菜单数据,路径下的meta字段,包括了authority,以表示显示当前表单项的相关有权限用户。同时也很看出我们要采用VUE的vue-router插件,以控制点击菜单时在layout中出现的不同content组件,实现SPA效果。因为里边有children子菜单的出现,所以要采用递归算法来动态生成相关的菜单表项,下面列出./layouts/SilderMenu/index.vue的模板实现:
  <template>
  <a-menu
  :selectedKeys="selectedKeys"
  :openKeys.sync="openKeys"
  mode="inline"
  :theme="theme">
  <template v-for="item in menuData">
  <a-menu-item
  v-if="!item.children"
  :key="item.path"
  @click="() => $router.push({ path: item.path, query: $route.query })"
  >
  ...
  </a-menu-item>
  <sub-menu v-else :menu-info="item" :key="item.path" />
  </template>
  </a-menu>
  </template>
  可见要在JS代码中提供menuData等相关数据:
  data() {
  const menuData = this.getMenuData(this.$router.options.routes)
  return {
  menuData,
  }
  },
  getMenuData方法是获取由服务端取得相关JSON数据渲染到实现菜单组件中,在methods中实现:
  getMenuData(routes = []) {
  const menuData = []
  for (let item of routes) {
  if (item.meta && item.meta.authority) {
  if (!check(item.meta.authority)) {
  continue
  }
  }
  if (item.name && !item.hideInMenu) {
  const newItem = { ...item }
  delete newItem.children
  if (item.children && !item.hideChildrenMenu) {
  newItem.children = this.getMenuData(item.children)
  } else {   }
  menuData.push(newItem)
  } else if (
  !item.hideInMenu &&
  !item.hideChildrenMenu &&
  item.children
  ) {
  menuData.push(
  ...this.getMenuData(item.children),
  )
  }
  }
  return menuData
  },
  这段代码十分复杂,有以下几点值得注意:
  * check(item.meta.authority)是检查当前用户是否显示该菜单的判断;
  * 通过JSON菜单数据的hideMenu, hideChildMenu值,以判断是否显示在菜单中,因为我们是通过vue-router来推送路径的,有的路径不需要再现在菜单中,如404、登录注册页面等。
  * 根据菜单数据中children数据,采用递归调用方法,简化了算法逻辑。
  从./layouts/SilderMenu/index.vue中的<template />实现中,我们还必须实现SubMenu子组件:
  <template functional>
  <a-sub-menu :key="props.menuInfo.path">
  ......
  </template>
  </a-sub-menu>
  </template>
  与SubMenu交互中,只需要通过VUE的props传送已解析的菜单数据即可,即:menu-info="item"这段代码。
  菜单组件的实现,主要采用了唐金洲Vue开发实战中的开发思路,是这段业务系统开发中花费时间较多的,逻辑也相对比较复杂的一段代码,综合运用了多种前端开发的前沿知识,本人也无法贴出所有代码,细讲所有的知识点,因为里边涉及的东西太多了。有需要的可与我联系,我们共同进步和提高。
  参考文献:
  [1]唐金洲.Vue 开发实战[EB/OL].北京:ant-design-vue官網.2019-5-1
  [2]肖睿,龙颖.Vue 企业开发实战[M].北京:人民邮电出版社.2018-12-01
其他文献
摘 要:社会的飞速发展和与日俱增的竞争,导致人们面临的压力越来越大,而且这些压力广泛的存在于各个阶层中,在学生身上表现的较为明显。特别是小学生,由于学生的年纪较小,心理承受能力弱,容易受到社会上各种因素的影响产生心理问题。而且由于小学生的心理健康问题表现不明显,容易被忽视,长此以往,心理问题日趋严重,最后导致严重的后果。因此加强小学心理健康教育显得尤为重要,本文将从积极心理学取向出发,探讨小学心理
期刊
摘 要:本文从冶金的发展历史为出发点,介绍了冶金工业的重要性,在国家历史发展的文明中,在社会经济发展和社会整体的起步发展中都占有十分重要的位置,是我国工业发展的重要内容。但是冶金工业大发展势必会带来资源的消耗和环境的污染,尤其是新时期下,人们对资源的整合利用上对环境保护的重视上,冶金工业必然就要积极面对解决这些负面影响和问题。本文就根据冶金工业的可持续发展的战略目标,着重介绍了冶金工业中资源的综合
期刊
摘 要:在时代的不断进步的过程中,技工院校计算机基础课程教学也要顺应信息化时代的发展,让学生能够更好的适应信息化发展的社会,促进学生未来良好发展。但是在当前的计算机基础课程的教学中明显还存在着一些缺陷和问题。基于这些问题,本文先对技工院校的计算课程教学的重要性以及教学现状进行一系列的探究,再根据对技工院校计算机基础课程的教学研究,以及教学过程中注重培养学生适应21世纪信息化社会要求的计算机技能型人
期刊
摘 要:建设教育强国是中华民族伟大复兴的基础工程,要落实立德树人根本任务,加强师德师风建设。其中,新时代师德建设尤为重要。高校青年教师整体具备较强的事业心和责任感,作为知识传授者和学生领航员,除了要具备良好的专业知识素养,更重要的是具有良好的师德修养。加强高校青年教师师德建设,要从教师主体和学校组织两方面下功夫,在提高高校青年教师师德水平的基础上进一步推动高校教育事业的发展。  关键词:高校青年教
期刊
摘 要:目前,世界范围内的商业贸易都在发展,互联网技术也逐渐进步,在大量国家,电子商务在国民经济中的地位越来越重要。随着全球化的不断深化,电子商务也日益发展,商务英语作为贸易活动中很常见的语言,其扮演的角色越来越重要。在电子商务贸易中,正确的翻译常常会减少贸易往来中纠纷的出现,这对电子商务的发展是非常有利的。不过,当下商务英语的翻译还有很多需要弥补的漏洞,特别是受到各种文化差异的影响,在实际翻译的
期刊
摘 要:高校教育在当今社会发展中具有十分重要的意义,不仅担任着人才培养、社会服务的任务,同时还肩负着科学研究和文化创新的重要使命,而高校教师作为民族先进思想文化的传播者,有责任和义务帮助学生树立正确的“三观”,使学生既具备较强的专业素养,同时还可以拥有良好的道德品德,以此为社会的发展国家的繁荣做出应有的贡献。但是在这个过程中,教师首先要积极提高自身职业道德修养,这样培养出来的学生才会更加优秀。对此
期刊
摘 要:本文阐述了习总书记关于课程思政的讲话精神,明确了我校建筑工程技术专业《装配式钢结构施工》课程中的思政元素,并对该课程教学指出了发展方向。  关键词:课程思政;装配式钢结构;工匠精神;建筑仿真  前言  习近平总书记在全国高校思想政治工作会议上的讲话中指出:“做好高校思想政治工作,要用好课堂教学这个主渠道,思想政治理论课要坚持在改进中加强,其他各门课都要守好一段渠、种好责任田,使各类课程与思
期刊
摘 要:新形势下,素质教育理念不断深入,开展教育教学不仅要注重对学生进行理论文化知识的教学,还应该从学生的思想认识和理论技能的应用着手做好教学引导,所以应该重视对学生的思想政治教育,不断提高学生的思想道德品质,促进学生职业道德品质的提升。基于此,文章分析了当前技工院校学生的思想政治教育现状,从坚持以人为本的理念,发挥出各方管理服务角色的作用,加强学生政治素养,将思想政冶元素融入课堂,积极构建技工院
期刊
摘 要:互联网的普及促进了计算机技术的蓬勃发展,影响了各行各业的发展模式,社会对计算机专业人才的需求与日俱增,中职计算机网络课程教学应运而生并迎来了发展的机遇与挑战,然而,从中等职业学校教学实践来看,计算机网络课程教学存在诸多问题亟待解决!文章分析了计算机网络课程教学的特点及中职院校计算机网络课程教学现状,并尝试从计算机网络课程教学内容、课堂组织方式、教学方法、教学模式、教学评价等方面入手提出强化
期刊
摘 要:学风建设是高校教育改革与发展中的永恒主题,当前高校学风建设面临一些新挑战,青岛工学院在“六位一体”理念的引领下,对如何进一步加强学风建设进行了一系列新探索。  关键词:学风建设;六位一体;青岛工学院  学风是一所高校的灵魂,学风建设是民办高校教改与发展的永恒主题。高校学风建设的实质就是围绕学生学习和成才所展开的一系列培育、传承、践行的教育活动,培育优良学风是新时代高校立德树人的重要任务。“
期刊