多级菜单组件:
<template>
<view class="menu">
<view class="menu-item" v-for="item in menuList" :key="item.id" @click="handleClick(item)">
{{ item.name }}
<view class="sub-menu" v-if="item.children && item.children.length > 0 && item.open">
<menu :menu-list="item.children" @handleClick="handleClick"></menu>
</view>
</view>
</view>
</template>
<script>
export default {
name: 'menu',
props: {
menuList: {
type: Array,
default: () => []
}
},
data () {
return {
activeId: ''
}
},
methods: {
handleClick (item) {
if (item.children && item.children.length > 0) {
item.open = !item.open
this.$set(this.menuList, item.id, item)
} else {
this.activeId = item.id
this.$emit('handleClick', item)
}
}
}
}
</script>
<style>
.menu {
padding: 10rpx;
}
.menu-item {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 32rpx;
padding: 10rpx 0;
border-bottom: 1px solid #eee;
cursor: pointer;
}
.sub-menu {
padding-left: 30rpx;
}
</style>
这个组件是一个递归组件,可以处理多级菜单的情况。它接收一个名为menuList
的数组作为参数,这个数组包含了所有的菜单项。当菜单项有子菜单时,用户可以点击它展开或收起子菜单。当用户点击一个菜单项时,如果它没有子菜单,那么它会被激活并触发一个名为handleClick
的自定义事件,将被父组件捕获。