子组件递归调用时, 无需引入, 根据name名称直接引用
// 父组件,如mainMenu.vue
<template>
<el-menu>
<child-menu :dataList="listData"></child-menu>
</el-menu>
</template>
<script setup lang="ts">
import childMenu from './childMenu.vue'
const listData = [
{
name: '钠管设备',
id: '1',
level: 1,
child: [
{
name: '系统默认组',
id: '2',
flag: true
},
{
name: '设备一组',
id: '3',
child: [
{
name: '一组A小组',
id: '4',
child: [
{
name: '一组A小组的成员1',
id: '5'
},
{
name: '一组A小组的成员2',
id: '6',
child: [
{
name: '一组A小组的成员何总',
id: '7'
},
{
name: '一组A小组的成员曾',
id: '8'
},
{
name: '一组A小组的成员飘总',
id: '9'
}
]
}
]
},
{
name: '一组B小组',
id: '10'
}
]
},
{
name: '设备二组',
id: '11'
}
]
}
]
</script>
//childMenu.vue 子组件
<template>
<div class="menu-tree">
<label v-for="list in dataList" :key="list.id">
<el-sub-menu :index="list.id" v-if="list.child">
<template #title>
<i class="el-icon-location" v-if="list.level"></i>
<span>{{ list.name }}</span>
</template>
<label>
<child-menu :dataList="list.child"></child-menu>
</label>
</el-sub-menu>
<el-menu-item v-else :index="list.name">
<span>{{ list.name }}</span>
</el-menu-item>
</label>
</div>
</template>
<script setup lang="ts">
defineProps<{
dataList: Array<any>
}>()
</script>
// 备注:需要提前引入elementplus组件。可直接使用之前生成的框架(前九步即可):链接地址。