mirror of
https://github.com/element-plus/element-plus.git
synced 2026-03-13 07:51:17 +08:00
* style: use prettier * style: just prettier format, no code changes * style: eslint fix object-shorthand, prefer-const * style: fix no-void * style: no-console
57 lines
1.3 KiB
Vue
57 lines
1.3 KiB
Vue
<template>
|
|
<ul
|
|
v-clickOutside:[triggerElm]="innerHide"
|
|
:class="[size && `el-dropdown-menu--${size}`]"
|
|
class="el-dropdown-menu"
|
|
@mouseenter.stop="show"
|
|
@mouseleave.stop="hide"
|
|
>
|
|
<slot></slot>
|
|
</ul>
|
|
</template>
|
|
<script lang="ts">
|
|
import { defineComponent, getCurrentInstance, onMounted } from 'vue'
|
|
import { ClickOutside } from '@element-plus/directives'
|
|
import { useDropdown, initDropdownDomEvent } from './useDropdown'
|
|
|
|
export default defineComponent({
|
|
name: 'ElDropdownMenu',
|
|
directives: {
|
|
ClickOutside,
|
|
},
|
|
setup() {
|
|
const { _elDropdownSize, elDropdown } = useDropdown()
|
|
const size = _elDropdownSize.value
|
|
|
|
function show() {
|
|
if (['click', 'contextmenu'].includes(elDropdown.trigger.value)) return
|
|
elDropdown.show?.()
|
|
}
|
|
function hide() {
|
|
if (['click', 'contextmenu'].includes(elDropdown.trigger.value)) return
|
|
_hide()
|
|
}
|
|
function _hide() {
|
|
elDropdown.hide?.()
|
|
}
|
|
|
|
onMounted(() => {
|
|
const dropdownMenu = getCurrentInstance()
|
|
initDropdownDomEvent(
|
|
dropdownMenu,
|
|
elDropdown.triggerElm.value,
|
|
elDropdown.instance
|
|
)
|
|
})
|
|
|
|
return {
|
|
size,
|
|
show,
|
|
hide,
|
|
innerHide: _hide,
|
|
triggerElm: elDropdown.triggerElm,
|
|
}
|
|
},
|
|
})
|
|
</script>
|