在vue3中根据Element Plus组件开发右键菜单,组件复用性高,可设置自定义图标和icon!
<template>
<div class="context-menu" v-show="visible" :style="position">
<el-button
v-for="item in menuList"
:key="item.name"
:icon="item.icon"
class="menu-item"
@click="handleClick(item.name)"
>
{{ item.title }}
</el-button>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { ElButton } from 'element-plus';
const props = defineProps({
menuList: {
type: Array,
default: () => [],
},
});
const emit = defineEmits(['select']);
const visible = ref(false);
const position = ref({ top: '0', left: '0' });
// 设置右键菜单的显示和位置
function setVisible(visible, pos) {
this.visible = visible;
this.position.top = pos.y + 'px';
this.position.left = pos.x + 'px';
}
// 处理菜单项的点击事件
function handleClick(name) {
emit('select', name);
}
// 导出这些属性和方法,以便父组件可以控制和使用右键菜单
defineExpose({ setVisible, handleClick });
</script>
<style scoped>
.context-menu {
position: absolute;
z-index: 1000;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
padding: 5px 0;
}
.menu-item {
width: 100%;
text-align: left;
padding: 5px 15px;
}
</style>
这个代码实例提供了一个可复用的右键菜单组件,它使用Element Plus组件库来创建按钮,并允许通过menuList
属性配置菜单项。它还提供了setVisible
和handleClick
方法,以便父组件可以控制菜单的显示和响应用户的点击事件。通过defineProps
和defineEmits
API,Vue 3 使得组件的属性和事件更加清晰,也方便了单元测试。
评论已关闭