vue递归组件

//父组件
<template>
    <div>
        <digui :label="data.label" :children="data.nodes" :depth="depth"></digui>
    </div>
</template>

<script>
    import digui from "@/components/yuchunhui/digui"
    export default {
        name: "two",
        components:{
            digui
        },
        data(){
            return{
                depth:0,
                data:{
                    label: 'root',
                    nodes: [
                        {
                            show:false,
                            label: 'item1',
                            nodes: [
                                {
                                    label: 'item1.1'
                                },
                                {
                                    show:false,
                                    label: 'item1.2',
                                    nodes: [
                                        {
                                            label: 'item1.2.1'
                                        }
                                    ]
                                }
                            ]
                        },
                        {
                            label: 'item2'
                        }
                    ]
                }
            }
        }
    }
</script>

<style scoped>

</style>
//子组件
<template>
    <div>
        <!--缩进-->
        <div :style="indent">
            <!--如果有孩子显示开关-->
            <button v-if="children && children.length > 0" @click="toggleChildren">开关</button>
            <div>{{ label }}</div>
        </div>

        <!--是否展示子组件-->
        <div  v-show="showChildren">
            <!--如果有字列表并且长度不为0-->
            <div v-if="children && children.length > 0">
                <digui
                        v-for="item in children"
                        :key="item.label"
                        :children="item.nodes"
                        :label="item.label"
                        :depth="depth + 1">
                </digui>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        name: "digui",
        props:["label","children","depth"],
        data(){
            return{
                showChildren: false
            }
        },
        methods: {
            toggleChildren() {
                this.showChildren = !this.showChildren;
            }
        },

        computed: {
            indent() {
                return { transform: `translate(${this.depth * 50}px)` }
            }
        }
    }
</script>

<style scoped>

</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值