码迷,mamicode.com
首页 > Web开发 > 详细

vue.js 树菜单 递归组件树来实现

时间:2017-11-16 14:36:10      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:abs   img   rom   tree   草稿   enter   func   none   sub   

参照前辈方法实现的,觉得不错,记录一下:

技术分享

 

父组件:

<!-- 菜单树 -->
                <ul class="T_down" v-for="(menuItem,index) in customerArray" :key="index">
                    <tree-menu :treeData="menuItem"></tree-menu>
                </ul>


import treeMenu from ./treeMenu.vue


myMailTree: [
                {
                    id: 0,
                    label: 发件箱,
                    children: []
                },
                {
                    id: 1,
                    label: 收件箱,
                    children: [
                        {
                            id: 11,
                            label: 常用邮件,
                        },
                        {
                            id: 12,
                            label: 常用邮件,
                            children: [
                                {
                                    id: 11,
                                    label: 常用邮件,
                                    children: [
                                        {
                                            id: 11,
                                            label: 常用邮件,
                                        },
                                        {
                                            id: 12,
                                            label: 常用邮件,
                                            children: [
                                                {
                                                    id: 11,
                                                    label: 常用邮件,
                                                },
                                                {
                                                    id: 12,
                                                    label: 常用邮件,
                                                    children: [
                                                        {
                                                            id: 11,
                                                            label: 常用邮件,
                                                        },
                                                        {
                                                            id: 12,
                                                            label: 常用邮件,
                                                        },
                                                    ]
                                                },
                                            ]
                                        },
                                    ]
                                },
                                {
                                    id: 12,
                                    label: 常用邮件,
                                },
                            ]
                        },
                    ]
                },
                {
                    id: 3,
                    label: 草稿箱,
                },
            ],



 components: {
        tree-menu: treeMenu
    },

 

子组件:

<template>
    <li>
        <h3>
            <i v-if="isFolder" @click="toggle" class="iconfont" :class="[open ? ‘icon-arrow-down‘: ‘icon-arrow-right‘]"></i>
            <span class="label">{{treeData.label}}
                <em>(99)</em>
            </span>
            <span class="T_set">
                <i class="iconfont icon-subordinate"></i>
                <i class="iconfont icon-subordinate"></i>
                <i class="iconfont icon-subordinate"></i>
            </span>
        </h3>
        <ul class="T_down" v-show="open" v-if="isFolder">
            <tree-menu v-for="item in treeData.children" :key="item.id" :treeData="item"></tree-menu>
        </ul>
    </li>
</template>

<script>
export default {
    name: treeMenu,
    props: [treeData],
    data() {
        return {
            open: false
        }
    },
    computed: {
        isFolder() {
            return this.treeData.children && this.treeData.children.length
        }
    },
    methods: {
        toggle: function() {
            if (this.isFolder) {
                this.open = !this.open
            }
        }
    }
}
</script>

less

ul.T_down {
                    //菜单树
                    // border: 1px solid red;
                    background-color: #fff;
                    padding-left: 17px;
                    line-height: 35px;
                    li {
                        >h3 {
                            // border: 1px solid red;
                            font-weight: normal;
                            font-size: 14px;
                            padding-left: 23px;
                            cursor: default;
                            position: relative;
                            >i.iconfont {
                                display: block;
                                width: 23px;
                                height: 100%;
                                text-align: center;
                                font-size: 12px;
                                position: absolute;
                                left: 0;
                                top: 0;
                                &:hover {
                                    color: #008cee;
                                    cursor: pointer;
                                }
                            }
                            >span.label {
                                color: #555;
                                >em {
                                    font-size: 12px;
                                    font-style: normal;
                                    color: #888;
                                }
                            }
                            &:hover {
                                background-color: #ddd;
                                span.T_set {
                                    display: block;
                                }
                            }
                            span.T_set {
                                float: right;
                                margin-right: 10px;
                                display: none;
                                i.iconfont {
                                    display: inline-block;
                                    padding: 0 2px;
                                    font-size: 13px;
                                    &:hover {
                                        color: #008cee;
                                        cursor: pointer;
                                    }
                                }
                            }
                        }
                    }
                }

 

参考链接:

https://www.cnblogs.com/caihg/p/6208105.html

 

vue.js 树菜单 递归组件树来实现

标签:abs   img   rom   tree   草稿   enter   func   none   sub   

原文地址:http://www.cnblogs.com/xiangsj/p/7843477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!