elementui 侧边栏,

  elementui 侧边栏,

  本文主要介绍element-ui侧边栏的路由器问题,有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。

  

目录

   route Element中侧栏的分析和实现-元素的UI-UI侧栏el-menu和El-submenu概述侧栏分析和实现

  

element-ui 侧边栏的router

  所以动态获取api中的路径值作为它的路由器就足够了。注意优越路线。带字符串串联:index=/home/

  对于二级导航栏,这里的item是v-for循环上层的item.children(一级导航栏)的item。

  El-menu-item:index= /home/ item . path /El-menu-item

  

element-ui中侧边栏的分析及实现

  

el-menu 和 el-submenu

  1.如果你需要实现一个侧边栏,会怎么设计?

  2.侧边栏的核心是映射路由器和按照权限过滤的el-menu组件,所以el-menu和el-submenu是理解侧边栏的基础。

  3.el-menu代表菜单容器组件,如下图所示:

  默认活动:当前活动菜单的索引。注意,如果有子菜单,需要填写子菜单IDunique-opened。你只保留一个子菜单的扩展模式吗?枚举值,水平/垂直折叠是否水平折叠菜单(仅当模式为垂直时可用),折叠过渡是否打开折叠动画@选择点击菜单事件,菜单激活回调索引:选中菜单项的索引,IndexPath:选中菜单项的索引路径@open:子菜单展开回调@ @close:子菜单关闭回调4 . El-子菜单,子菜单容器,el-menu代表整个菜单,el-submenu代表特定菜单,但此菜单也包含子菜单。El-submenu可以通过定制槽的标题来定制菜单模式。el-submenu容器中的默认槽用于存储子菜单,子菜单可以包括三个子菜单组件,如下所示:

  El-menu-item-group:菜单分组,为一组菜单添加标题。el菜单项需要存储在容器中。它支持通过标题槽定制标题样式。el-submenu支持el-submenu的循环嵌套,支持两个以上的子组件实现el-menu-item:子菜单组件示例代码,如下图所示:

  el-row class=tac

  el-col :span=12

  H5默认颜色/h5

  el菜单

  默认-活动=2

  el-menu-vertical-demo

  @open=handleOpen

  @close=handleClose

  El-子菜单索引=1

  模板槽=标题

  i class=el-icon-location/i

  导航1 /span

  /模板

  El-菜单-项目-组

  模板槽=标题分组一/模板

  El菜单项索引=1-1 选项1/el菜单项

  El菜单项索引=1-2 选项2/el菜单项

  /El-菜单项-组

  El-menu-item-Group title= Group 2

  El菜单项索引=1-3 选项3/el菜单项

  /El-菜单项-组

  El-子菜单索引=1-4

  模板槽=标题选项4/模板

  El菜单项索引=1-4-1 选项1/el菜单项

  /El-子菜单

  /El-子菜单

  el菜单项索引=2

  i class=el-icon-menu/i

  Span slot=title 导航II /span

  /El-菜单项

  el菜单项索引=3 已禁用

  i class=el-icon-document/i

  Span slot=title 导航III /span

  /El-菜单项

  el菜单项索引=4

  i class=el-icon-setting/i

  Span slot=title 导航IV /span

  /El-菜单项

  /el-menu

  /el-col

  el-col :span=12

  H5定制颜色/h5

  el菜单

  默认-活动=2

  el-menu-vertical-demo

  @open=handleOpen

  @close=handleClose

  background-color=#545c64

  text-color=#fff

  active-text-color=#ffd04b

  El-子菜单索引=1

  模板槽=标题

  i class=el-icon-location/i

  导航1 /span

  /模板

  El-菜单-项目-组

  模板槽=标题分组一/模板

  El菜单项索引=1-1 选项1/el菜单项

  El菜单项索引=1-2 选项2/el菜单项

  /El-菜单项-组

  El-menu-item-Group title= Group 2

  El菜单项索引=1-3 选项3/el菜单项

  /El-菜单项-组

  埃尔-子菜单索引=1-4

  模板槽=标题选项4/模板

  埃尔菜单项索引=1-4-1 选项1/el菜单项

  /El-子菜单

  /El-子菜单

  埃尔菜单项索引=2

  i class=el-icon-menu/i

  span slot=title 导航二/span

  /El-菜单项

  埃尔菜单项索引=3 已禁用

  i class=el-icon-document/i

  span slot=title 导航三/span

  /El-菜单项

  埃尔菜单项索引=4

  i class=el-icon-setting/i

  span slot=title 导航四/span

  /El-菜单项

  /el-menu

  /el-col

  /el-row

  脚本

  导出默认值{

  方法:{

  handleOpen(key,keyPath) {

  console.log(key,key path);

  },

  handleClose(key,keyPath) {

  console.log(key,key path);

  }

  }

  }

  /脚本

  

sidebar 分析

  1 .边栏,如下所示:

  活动菜单:通过meta.activeMenu属性,指定路由对应的高亮菜单,meta.activeMenu需要提供一个合法的路由,否则不能生效isCollapse:NavBar中点击按钮,会修改饼干中的侧边状态,从状态管理取值时会将侧边状态转为布尔型,并判断默认是否需要收缩左侧菜单栏显示徽标:判断设置。射流研究…中的配置项是否需要展示标志;徽标变量:从@ style/变量。半铸钢钢性铸铁(Cast Semi-Steel)中获取半导体色敏传感器对象,从而获取样式2 .侧栏,代码实现如下:

  模板

  div:class= { has-logo :show logo }

  logo v-if= show logo :collapse= is collapse /

  El-滚动条wrap-class=" scroll bar-wrapper "

  埃尔菜单

  :default-active=activeMenu

  :collapse=isCollapse

  :background-color=变量。menubg

  :text-color=variables.menuText

  :unique-opened=false

  :active-text-color=变量。菜单活动文本

  :collapse-transition=false

  模式=垂直

  侧栏-item v-for= route in permission _ routes :key= route。“path”:item=“route”:base-path=“route。路径/

  /el-menu

  /El-滚动条

  /div

  /模板

  脚本

  从" vuex "导入{ mapGetters }

  从导入徽标。/徽标

  从导入SidebarItem ./SidebarItem

  从" @/styles/variables.scss "导入变量

  导出默认值{

  组件:{ SidebarItem,Logo },

  计算值:{

  .mapGetters([

  权限_路线,

  边栏

  ]),

  activeMenu() {

  恒定路线=这个.$路线

  const { meta,path }=route

  if (meta.activeMenu) {

  返回meta.activeMenu

  }

  返回路径

  },

  showLogo() {

  归还这个100美元商店。状态。设置。侧栏标志

  },

  变量(){

  返回变量

  },

  isCollapse() {

  回归!this.sidebar.opened

  }

  }

  }

  /脚本

  3 .侧栏中通过侧栏项目实现子菜单,侧栏-项目的小道具是项目为路由对象,基本路径是路由路径侧栏-项目的展示逻辑,如下所示:

  通过项目。隐藏控制菜单是否展示

  通过hasOneShowingChild(项目。孩子,物品)(!只有一个孩子。孩子 只有一个孩子。noshowingchildren)!item.alwaysShow逻辑判断模板菜单是否展示,模板代表单一菜单,如下所示:

  hasOneShowingChild:判断是否只有一个需要展示的子路由!只有一个孩子。孩子 只有一个孩子。禁止显示儿童:判断需要展示的子菜单,是否包含孩子们属性,如果包含,则说明子菜单可能存在孙子菜单,此时需要再判断没有孩子属性!item.alwaysShow:判断路由中是否存在总是显示属性,如何存在,则返回假的,不展示模板菜单,也就是只要配置了总是显示属性就会直接进入埃尔-子菜单组件4.对于hasOneShowingChild方法,儿童是路由器对象的孩子们属性,项目是路由器对象,代码如下所示:

  hasOneShowingChild(children=[],parent) {

  const显示儿童=儿童。过滤器(项目={

  //如果孩子们中的路由包含隐藏的属性,则返回错误的

  if (item.hidden) {

  返回错误的

  }否则{

  //将子路由赋值给只有一个孩子,用于只包含一个路由时展示

  this.onlyOneChild=item

  返回真实的

  }

  })

  //如果过滤后,只包含展示一个路由,则返回真实的

  如果(展示孩子。长度===1){

  返回真实的

  }

  //如果没有子路由需要展示,则将独生子女的推设置空路由,并添加没有孩子

  如果(展示孩子。长度===0){

  this.onlyOneChild={.父级,路径: ,noShowingChildren: true }

  返回真实的

  }

  //返回假的,表示不需要展示子路由,或者超过需要展示的子路由

  返回错误的

  }

  5.对于它们之间的关系,如下所示:

  如果展示模板组件,首先会展示应用链接组件,然后是埃尔菜单项,最里面嵌套的是项目组件第106 .11项。组件需要自指的中包含标题和图标属性,否则将渲染内容为空的虚拟节点对象。

  如果模板菜单不展示,则展示埃尔-子菜单菜单,埃尔-子菜单逻辑中采用了嵌套组件的做法,将侧栏项目嵌套在埃尔-子菜单中

  埃尔-子菜单中的侧栏项目的区别,第一个是传入是巢参数,第二个是传入基本路径参数

  6 .侧边栏项目,代码如下所示:

  模板

  div v-if=! item.hidden

  模板v-if= hasOneShowingChild(item。孩子,物品)(!只有一个孩子。孩子 只有一个孩子。没有孩子)!” item.alwaysShow

  app-link v-if= onlyonechild。 meta :to=解析路径(onlyonechild。路径)

  El-menu-item:index= resolve path(只有一个子级。path):class= { 子菜单-标题-无下拉:isNest}

  item:icon= onlyonechild。meta。图标 (项目。元项目。meta。icon):title= onlyonechild。meta。标题/

  /El-菜单项

  /app-link

  /模板

  El-subMenu v-else ref= subMenu :index= resolve path(item。path) popper-附加到正文

  模板槽=标题

  item v-if= item。 meta :icon= item。元项目。meta。 icon :title= item。meta。标题/

  /模板

  侧栏项目

  v-for= item。孩子们中的子级

  :key=child.path

  :is-nest=true

  :item=child

  :base-path=解析路径(子级。路径)

  嵌套菜单

  /

  /El-子菜单

  /div

  /模板

  脚本

  从"路径"导入路径

  从" @/utils/validate "导入{ isExternal }

  从导入项目 100元/项

  从导入应用程序链接

  从""导入FixiOSBug ./FixiOSBug

  导出默认值{

  名称: SidebarItem ,

  组件:{ Item,AppLink }

  mixins: [FixiOSBug],

  道具:{

  //路由对象

  项目:{

  类型:对象,

  必填:真

  },

  isNest: {

  类型:布尔型,

  默认值:错误

  },

  基本路径:{

  类型:字符串,

  默认值:""

  }

  },

  data() {

  this.onlyOneChild=null

  返回{}

  },

  方法:{

  hasOneShowingChild(children=[],parent) {

  const显示儿童=儿童。过滤器(项目={

  //如果孩子们中的路由包含隐藏的属性,则返回错误的

  if (item.hidden) {

  返回错误的

  }否则{

  //将子路由赋值给只有一个孩子,用于只包含一个路由时展示

  this.onlyOneChild=item

  返回真实的

  }

  })

  //如果过滤后,只包含展示一个路由,则返回真实的

  如果(展示孩子。长度===1){

  返回真实的

  }

  //如果没有子路由需要展示,则将独生子女的推设置空路由,并添加没有孩子

  如果(展示孩子。长度===0){

  this.onlyOneChild={.父级,路径: ,noShowingChildren: true }

  返回真实的

  }

  //返回假的,表示不需要展示子路由,或者超过需要展示的子路由

  返回错误的

  },

  resolvePath(routePath) {

  if (isExternal(routePath)) {

  返回路线路径

  }

  if (isExternal(this.basePath)) {

  返回this.basePath

  }

  返回path.resolve(this.basePath,routePath)

  }

  }

  }

  /脚本

  7.app-link,是一个动态组件,通过到参数,如果包含超文本传送协议(超文本传输协议的缩写)前缀则变成一个a标签,否则变成一个路由器链接组件。

  8.app-link,代码如下所示:

  模板

  组件:is=type v-bind=linkProps(to)

  插槽/

  /组件

  /模板

  脚本

  从" @/utils/validate "导入{ isExternal }

  导出默认值{

  道具:{

  收件人:{

  类型:字符串,

  必填:真

  }

  },

  计算值:{

  isExternal() {

  返回isExternal(this.to)

  },

  type() {

  如果(this.isExternal) {

  返回" a "

  }

  返回"路由器链接"

  }

  },

  方法:{

  linkProps(to) {

  如果(this.isExternal) {

  返回{

  href:到,

  目标:" _blank ",

  版本:"诺珀纳"

  }

  }

  返回{

  至:至

  }

  }

  }

  }

  /脚本

  9 .物品组件,通过定义的提出函数完成组件渲染。

  10项,代码如下所示:

  脚本

  导出默认值{

  名称:"菜单项",

  功能性:真的,

  道具:{

  图标:{

  类型:字符串,

  默认值:""

  },

  标题:{

  类型:字符串,

  默认值:""

  }

  },

  render(h,context) {

  const { icon,title }=上下文。道具

  const vnodes=[]

  如果(图标){

  如果(图标。包括( El图标){

  vnodes.push(i class={[icon, sub-el-icon]} /)

  }否则{

  vnodes。push(SVG-icon icon-class={ icon }/)

  }

  }

  如果(标题){

  vnodes。push(span slot= title { title)}/span

  }

  返回虚拟节点

  }

  }

  /脚本

  样式范围。子埃尔图标{

  颜色:当前颜色

  宽度:1em

  身高:1em

  }

  /风格

  

侧边栏实现总结

  1 .侧边栏主要包括埃尔菜单容器组件,电子菜单中遍历状态管理中的路线,生成侧栏项目组件侧边栏主要配置如下所示:

  活动菜单:根据当前路由的meta.activeMenu属性控制侧边栏中高亮菜单isCollapse:根据饼干的侧边状态控制侧边栏是否折叠变量:通过@ style/变量。半铸钢钢性铸铁(Cast Semi-Steel)填充埃尔菜单的基本样式2 .侧边栏项目,分为两个部分,如下所示:

  第一部分是当只需要展示一个孩子们或者没有孩子们时进行展示,展示的组件包括:

  应用程序链接:动态组件,路径为链接时,显示为a标签,路径为路由时,显示为路由器链接组件埃尔菜单项:菜单项,当侧栏项目为非筑巢组件时,el菜单项会增加子菜单-标题-不下拉的类项目:el菜单项目里的内容,主要是图标和标题,当标题为空时,整个菜单项将不会展示第二部分是当孩子们超过两项时进行展示,展示的组件包括:

  埃尔-子菜单:子菜单组件容器,用于嵌套子菜单组件

  侧栏-项目:el-submen迭代嵌套了侧栏项目组件,在侧栏项目组件中的变化,设置了是巢属性为没错,根据child.path生成了基本路径属性传入侧栏项目组件

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: