zoukankan      html  css  js  c++  java
  • elementui v-for el-menu 任意多级菜单

    父组件:Nav.vue

    <template>
        <div>
            <el-menu
                    default-active="1"
                    background-color="#545c64"
                    text-color="#fff"
                    active-text-color="#ffd04b">
                <!-- 引入组件 -->
                <MenuTree :menuData="menuList"></MenuTree>
            </el-menu>
        </div>
    </template>
    
    <script>
        import {reactive, ref, isRef, toRefs, onMounted, watch, onUnmounted} from '@vue/composition-api';
        import MenuTree from "../../../components/MenuTree";
    
        export default {
            name: "Nav",
            components: {
                MenuTree: MenuTree
            },
            setup({root, refs,}, props) {
                const isCollapse = ref(true);
    
                const menuData = reactive('menuData')
                const menuList = reactive([{
                    index: "1",
                    name: "1",
                    icon: 'el-icon-s-order',
                    children: [{
                        index: "2",
                        name: "1-2",
                        icon: 'el-icon-s-order',
                        children: [{
                            index: "3",
                            name: "1-2-1",
                            icon: 'el-icon-s-order',
                        }, {
                            index: "4",
                            name: "1-2-2",
                            icon: 'el-icon-s-order',
                            children: [{
                                index: "5",
                                name: "1-2-2-1",
                                icon: 'el-icon-s-order',
                            }, {
                                index: "6",
                                name: "1-2-2-2",
                                icon: 'el-icon-s-order',
                                children: [{
                                    index: "7",
                                    name: "1-2-2-2-1",
                                    icon: 'el-icon-s-order',
                                },{
                                    index: "8",
                                    name: "1-2-2-2-2",
                                    icon: 'el-icon-s-order',
                                }]
                            }]
                        }],
                    }]
                }, {
                    index: "9",
                    name: "2",
                    icon: 'el-icon-s-order',
                }, {
                    index: "10",
                    name: "3",
                    icon: 'el-icon-s-order',
                }, {
                    index: "11",
                    name: "4",
                    icon: 'el-icon-s-order',
                }])
    
    
                const handleOpen = ((key, keyPath) => {
                    console.log(key, keyPath);
                })
    
                const handleClose = ((key, keyPath) => {
                    console.log(key, keyPath)
                })
    
    
                return {
                    menuList,
                    handleOpen,
                    handleClose,
                    menuData
                }
            }
        }
    </script>
    
    <style lang="scss" scoped>
    
    
    </style>
    

    子组件:MenuTree.vue

    <template>
        <div>
            <template v-for="(menu,index) in menuData">
                <el-submenu :key="menu.index" :index="menu.index" v-if="menu.children" >
                    <template slot="title">
                            <i :class="menu.icon"></i>
                            <span slot="title">{{menu.name}}</span>
                    </template>
                    <MenuTree :menuData="menu.children" ></MenuTree>
                </el-submenu>
                <el-menu-item :key="menu.index" :index="menu.index"   v-else>
                        <i :class="menu.icon"></i>
                        <span slot="title">{{menu.name}}</span>
                </el-menu-item>
            </template>
        </div>
    </template>
    
    <script>
        import {reactive, ref, isRef, toRefs, onMounted, watch, onUnmounted} from '@vue/composition-api';
        export default {
            name: "MenuTree",
            props: ['menuData'],
            components:{
            },
            setup({root}, props) {
                return {
                    props,
                }
            }
        }
    </script>
    
    <style lang="scss" scoped>
        .bgc{
            background-color: #f56c6c;
        }
    
        .bgcChild{
            background-color: #f56c6c;
        }
    
    
    </style>
    

    效果:

  • 相关阅读:
    PHP 操作redis常用方法代码
    PHP 大型网站 高并发大流量解决方案
    Nginx 负载均衡
    maven中mirror与repositories的关系
    Java事件机制---自定义事件
    sql优化几个方面
    临时表的概念
    sql产生临时表
    MySQL rows
    工厂模式 https://www.jianshu.com/p/6dfb5b66d088
  • 原文地址:https://www.cnblogs.com/yscec/p/13748704.html
Copyright © 2011-2022 走看看