vue递归组件使用,vue递归组件 n级联动

  vue递归组件使用,vue递归组件 n级联动

  这篇文章主要为大家详细介绍了某视频剪辑软件递归组件实现elementUI多级菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  本文实例为大家分享了某视频剪辑软件递归组件实现elementUI多级菜单的具体代码,供大家参考,具体内容如下

  先看效果:

  

一、子组件

  模板

  div class=myDiv

  !-这里的利斯托尔用于接收父组件传递进来的菜单列表-

  模板v-for=(item,i) in listAll

  !-有儿童就显示儿童的下拉型菜单,有小箭头-

  El-子菜单:index= item。 index :key= I v-if= item。孩子。长度!=0

  模板槽=标题

  img :src=item.img alt=

  span{{item.title}}/span

  /模板

  !-再次调用自身组件,传入子集,进行循环递归调用-

  Menu :listAll=item.child/Menu

  /El-子菜单

  !-没有孩子,就显示单个目录,没有小箭头-

  El-menu-item:index= item . index v-else:key= I @ click= handle select(item。路径,项目。标题,项目。索引)

  span slot= title img:src= item。img alt= { { item。title } }/span

  /El-菜单项

  /模板

  /div

  /模板

  脚本

  导出默认值{

  名称:菜单,

  组件:{},

  道具:[listAll],

  data() {

  返回{

  realList: this.listAll,

  }

  },

  方法:{

  //设置路由跳转

  手柄选择(路径,名称,自我索引){

  这个10.99 $ router . push(

  {

  路径:"/"路径,

  查询:{

  姓名,

  指数:自我指数

  }

  }

  )

  },

  },

  }

  /脚本

  

二、菜单数据准备

  菜单中包含索引,图片,名称,跳转路径,这里我给出一部分数据,路由直接用数字了,你们最好定义为组件的英文名称,这样方便维护。

  导出函数menuJson() {

  定义变量数据=[{

  标题: 元数据管理,

   img:./././static/img/manager.png ,

  索引:"1",

  孩子:[

  {

  标题: 元数据信息描述管理, path: main/02/005 , img :./././static/img/manager.png , index: 1-2 , child: []

  },

  {

  标题: 元数据分组定义管理, path: main/02/007 , img :./././static/img/manager.png , index: 1-3 , child: []

  },

  {

  标题: 元数据信息管理, path: main/02 , img :./././static/img/manager.png , index: 1-1 , child: [

  { 标题: 采集元数据, path: main/02/001 , index: 1-1-1 , img :./././static/img/blood.png , child: [] },

  { 标题: 元模型, path: main/02/004 , index: 1-2-1 , img :./././static/img/blood.png , child: [] },

  ]

  },

  {

  标题: 元数据统计分析管理, path: main/01 , index: 1-4 , img :./././static/img/manager.png , child: [

  { 标题: 元数据变更管理, path: main/01/001 , index: 1-4-1 , img :./././static/img/blood.png , child: [] },

  { 标题: 数据地图, path: main/01/002 , index: 1-4-2 , img :./././static/img/blood.png , child: [] },

  {

  标题: 元数据分析, path: main/01/003 , index: 1-4-3 , img :./././static/img/yuanfenxi.png , child: [

  { 标题: 血缘分析, path: main/01/003/0001 , index: 1-4-3-1 , img :./././static/img/blood.png , child: [] },

  { 标题: 属性差异分析, path: main/01/003/0003 , index: 1-4-3-2 , img :./././static/img/chayi.png , child: [] },

  { 标题: 影响分析, path: main/01/003/0004 , index: 1-4-3-3 , img :./././static/img/impact.png , child: [] },

  ]

  },

  ]

  },

  ]

  },

  {

  标题: 规则管理,

   img:./././static/img/manager.png ,

  索引:"2",

  孩子:[

  { 标题: 数据接口定义管理,索引: 2-1 ,路径: main/03/001 , img :./././static/img/source.png , child: [] },

  { 标题: 数据转换规则管理,索引: 2-2 ,路径: main/03/004 , img :./././static/img/modify.png , child: [] },

  ]

  }

  ]

  返回数据

  }

  

三、父组件调用

  模板

  div class=内容菜单

  div class= menu _ com :style= { height:scroll height px }

  el-col :span=24

  El-menu:default-active= active index class= El-menu-vertical-demo :default-openeds= default index background-color= # 003289 text-color= # fff active-text-color= # ffd 04 b

  //调用子组件

  菜单:listAll= listAll /菜单

  /el-menu

  /el-col

  /div

  /div

  /模板

  脚本

  从导入菜单。/菜单

  从导入{ menuJson }././assets/common/http //调用射流研究…文件中的菜单数据

  导出默认值{

  名称:"菜单",

  mixins: [mixin],

  组件:{ Menu },

  data() {

  返回{

  scrollHeight: 400,

  列表:[],

  活动索引:"-1 ",

  默认索引:[]

  }

  },

  已创建(){

  //设置点击菜单的索引,可以使得刷新后菜单仍保持原来查看的页面

  this.activeIndex=String(this .$ route。查询。指数);

  this.listAll=menuJson() //通过调用函数梅努森,获取菜单

  },

  观察:{

  $路线(至,自){

  this.activeIndex=this .$ route。查询。指数;

  }

  },

  }

  /脚本

  样式范围语言=少

  @ color:# 003289;菜单{

  背景:@颜色;

  部门{

  宽度:100%;

  padding-top:20px;

  //身高:100%;

  颜色:# ffffff

  溢出-y:滚动;

  溢出-x:隐藏;

  :-网络工具包-滚动条{

  显示:无;

  }

  h1 {

  字体大小:20px

  文本对齐:居中;

  填充:15px 0 25px 0

  }

  }

  }。埃尔菜单演示{

  位置:绝对;

  身高:58px!重要;

  左:25%;

  top:0%;

  }

  /风格

  补充(面包屑的展示):

  有菜单,肯定需要面包屑的展示,例如

  这里我用的方法是,根据当前页面名称,从树形菜单数据中查找它的所有父级来实现面包屑导航栏的展示。

  html:

  el面包屑分隔符-class=el-icon-arrow-right

  el-breadcrumb-item v-for=(item,index)in list menu :key= index { { item } }/El-bread crumb-item

  /el-breadcrumb

  方法:

  方法:{

  //获取树形数据的某个元素的所有父节点

  getTreePath(tree,func,path) {

  如果(!树)返回[]

  对于(树的常量数据){

  //这里按照你的需求来存放最后返回的内容吧

  //这里的标题是我的菜单数据里面的名称字段,你可以改成你的

  path.push(data.title)

  if (func(data))返回路径

  if (data.child) {

  //获取到子数据,递归调用

  const查找子代=this。gettreePath(数据。子、函数、路径)

  if (findChildren.length)返回寻找孩子

  }

  path.pop()

  }

  return []

  },

  //获取面包屑

  getNavList() {

  var name=this .$route.query.r_n //先获取当前路由名称

  var tree=menuJson() //获取菜单数据,menuJson这个函数上面用了,返回的事菜单数据

  this.path=[] //path用于存放所有父级,调用前需要清空

  //data=data.title===name查找数据中的标题是否和当前路由名称相等

  this.getTreePath(tree,data=data.title===name,this.path)

  this.listMenu=this.path //找到之后赋值给面包屑路由数组

  console.log(this.listMenu)

  }

  }

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

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

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