考虑以下菜单数据:
[ { name: 'About ',路径: '/关于',儿童:[{姓名: '关于美国',路径: '/关于/我们' },{姓名: '关于公司',路径: '/关于/公司',孩子:[{姓名: '关于公司A ',路径: '/关于/公司/A ',孩子:[{姓名3: '关于公司需要实现的效果:
首先创建两个组件菜单和菜单项
//MenuItemTemplate Li类=' item '插槽//Li/TemplateMenuItem是一个里标签和狭槽插槽,允许往里头加入各种元素
!-菜单-模板ul类='包装!-遍历路由器菜单数据-menuitem :键=' index ' v-for='(项目,索引)在路由器!-对于没有孩子们子菜单的item-span class=' item-title ' v-if='!项目。孩子" { item。name } }/span!-对于有孩子们子菜单的item-template v-else span @ click=' handleToggleShow ' { item。name } }/span!-递归操作-菜单:路由器='项目。children ' v-if=' toggleShow '/menu/template/MenuItem/ul/template脚本导入MenuItem from ' ./MenuItem ';导出默认{名称: '菜单,道具:['路由器'],//菜单组件接受一个路由器作为菜单数据components: { MenuItem },data(){ return { ToggleShow : false//toggle状态};},方法: { handleToggleShow(){//处理触发器状态的是否展开子菜单handler this.toggleShow=!this.toggleShow } } }/scriptMenu组件外层是一个保险商实验所标签,内部是vFor遍历生成的菜单项
这里有两种情况需要做判断,一种是项目没有孩子们属性,直接在菜单项的插槽加入一个跨度元素渲染项目的标题即可;另一种是包含了孩子们属性的项目这种情况下,不仅需要渲染标题还需要再次引入菜单做递归操作,将项目。儿童作为路由传入到路由器道具
最后在项目中使用:
模板div class='home '菜单:路由器='路由器'/菜单/div/模板脚本从@/组件/菜单导入菜单导出默认{ name: 'home ',components: { Menu },data () { return { router: //.省略菜单数据} } }/脚本最后增加一些样式:
MenuItem:
style lang="手写笔"范围。项目{ margin : 10px 0;padd : 0 10px border-radius : 4px;列表样式:无;背景sky bluecolor : # fff }/style menu :
style lang="手写笔"范围。包装器cursor:指针;项目标题{ font-size : 16px} }/styleMenu中保险商实验所标签内的代码可以单独提取出来,菜单作为包装材料使用,递归操作部分的代码也可以单独提取出来
总结
以上所述是小编给大家介绍的某视频剪辑软件递归多级菜单的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!