精简版,递归组件的重点就是直接用该页面的名字当组件用
父组件
<template>
<el-menu>
<menuTree :menuList="menuArr" @goPage="goPage"></menuTree>
</el-menu>
</template>
<script setup lang="ts">
import menuTree from './menuTree.vue' //子组件
menuArr:Array = [];//菜单数据
const goPage = () => {
console.log('父组件')
};
</script>
子组件,文件名 menuTree
<!-- 递归组件 -->
<template>
<template v-for="item in menuList" :key="item.id">
<template v-if="item.childer">
<!-- 直接用该组件的名字就行 -->
<menuTree :menuList="item.childer" @goPage="goPage"></menuTree>
</template>
<template v-else>
<template #title>{{ item.name }}</template>
</template>
</template>
</template>
<script setup lang="ts">
type Menu = {
name:string,
path:string,
icon?:string,
childer?:Menu[],
id:number,
[xxx:any]:any
}
type Props = {
menuList:Menu[]
}
defineProps<Props>()
const emits = defineEmits(['goPage']);
const goPage = () => {
emits('goPage');
};
</script>
版权声明:本文为m0_46978096原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。