VUE组件生成菜单树

树组件
<template>
  <ul class="label-box">
      <li class="label-item" v-for="(label,index) of list" :key="index">
          <p class="label" :class="{open: currentId == label.id,allowopen: label.children.length>0}"
             @click="showChildrenLabel(label.id)" :data-id="`${label.id}`">{{label.name}}</p>
          <tree v-if="label.children.length>0" :list="label.children"></tree>
      </li>
  </ul>
  <style scoped lang="scss">
   .label-box{
        padding-left: 30px;
        .label-item{
            line-height: 30px;
            .label{
                &:hover{
                    background-color: aliceblue;
                }
            }
            .label+.label-box{
                display: none;
            }
            .label.open+.label-box{
                display: block;
            }
        }
    }
	</style>
	<script>
	  export default {
	      name: "tree",
	      props: [
	          'list'
	      ],
	      data () {
	          return {
	              currentId: 0
	          }
	      },
	      mounted () {
	      },
	      methods: {
	          showChildrenLabel (id) {
	              if(this.currentId == id){
	                  this.currentId = -1
	                  return
	              }
	              this.currentId = id
	          }
	      }
	  }
	</script>
父组件调用
<template>
  <div id="app">
    <div class="app-roll-box">
        <div class="tree-box">
            <ul class="">
                <tree :list="list"></tree>
            </ul>
        </div>
    </div>
  </div>
</template>

export default {
  name: 'App',
  components: {
      tree
  },
  data () {
    return {
    	// 模拟数据
        list: [
            {
                id: '1',
                name: '一级菜单',
                children: [
                    {
                        id: '1-1',
                        name: '二级菜单1-1',
                        children: [
                            {
                                id: '1-1-1',
                                name: '三级菜单1-1-1',
                                children: []
                            },
                            {
                                id: '1-1-2',
                                name: '三级菜单1-1-2',
                                children: []
                            }
                        ]
                    },
                    {
                        id: '1-2',
                        name: '二级菜单1-2',
                        children: [
                            {
                                id: '1-2-1',
                                name: '三级菜单1-2-1',
                                children: []
                            },
                            {
                                id: '1-2-2',
                                name: '三级菜单1-2-2',
                                children: []
                            }
                        ]
                    }
                ]
            }
        ]
    }
  }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值