前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的。包括语音识别、机器翻译等从基础到实战都有,很详细,分享给大家。大家及时保存,说不定啥时候就没了。
elementUI使用v-for创建无限级导航栏—— 递归组件
直接copy,不需要墨迹
最新版本
说明:
根据返回的数据动态循环渲染菜单,是否具有子级目录递归创建所有目录并具有复用性,动态绑定相关属性;
解决步骤:
1、使用element组件(具体步骤不在赘述)
2、先创建公共组件
(1)在第一级菜单循环过程中,如判断出当前菜单存在着子级菜单,渲染出当前菜单,并将当前菜单的子级属性(例如:child:[数组]),利用子组件传参的方式,传给我们现在正在封装的组件(俗称:无限套娃)。
递归组件封装 MenuTree.vue
<template> <div> <el-menu default-active background-color="#545c64" text-color="#fff" active-text-color="#ffd04b" unique-opened > <template v-for="(item) in menuList"> <el-submenu v-if="item.child&&item.child.length>0" :key="item.id" :index="item.id"> <template slot="title"> <i class="el-icon-location"></i> <span>{{item.name}}</span> </template> <menu-sun :menuList="item.child"/> </el-submenu> <el-menu-item v-else :key="item.id" :index="item.id">{{item.name}}</el-menu-item> </template> </el-menu> </div> </template> <script> import MenuSun from "@/components/menuList.vue"; export default { name: "MenuSun",//必须要 递归组件的关键,并且要与引入组件的变量名称一致 components: { MenuSun }, props: { menuList: {} // 菜单的数据 } }; </script>
使用
<template> <div> <div class="menuList"> <menu-sun :menuList="menuList" /> </div> </div> </template> <script> import MenuSun from "./MenuTree.vue"; export default { components: { MenuSun }, data() { return { menuList: [ { name: "一级菜单1", id: "1" }, { name: "一级菜单2", id: "2", child: [ { name: "二级菜单2-1", id: "2-1" }, { name: "二级菜单2-2", id: "2-2", child: [{ name: "三级菜单1", id: "2-2-1" }] }, { name: "二级菜单2-3", id: "2-3", child: [{ name: "三级菜单1", id: "2-3-1" }] } ] }, { name: "一级菜单3", id: "3", child: [{ name: "二级菜单3-1", id: "3-1" }] }, { name: "一级菜单4", id: "4", child: [ { name: "二级菜单4-1", id: "4-1", child: [ { name: "三级菜单", id: "4-1-1", child: [{ name: "四级菜单", id: "4-1-1-1" }] }, { name: "三级菜单", id: "4-1-2" } ] } ] } ] }; } }; </script>
效果
原文链接:无限极导航栏递归组件
参考:element-ui的navMenu使用v-for循环渲染不同子标签(el-menu-item和el-submenu)