Skip to content

Dropdown 下拉菜单

将动作或菜单折叠到下拉菜单中。

基础用法

悬停在下拉菜单上以展开更多操作。

<script setup>
import { h } from 'vue'
import Dropdown from '@/components/Dropdown/Dropdown.vue'
import Button from '@/components/Button/Button.vue'
const options = [
  { key: 1, label: h('b', 'this is bold') },
  { key: 2, label: 'item2', disabled: true },
  { key: 3, label: 'item3', divided: true },
  { key: 4, label: 'item4' }
]
</script>
<template>
  <div class="basic block">
    <Dropdown
        placement="bottom"
        :menu-options="options"
    >
      <Button type="primary"> Hover 下拉菜单 </Button>
    </Dropdown>
  </div>
</template>
<style>
.vp-doc .vitepress-demo-preview-preview ul, .vp-doc .vitepress-demo-preview-preview  ol {
  list-style-type: none;
  margin: 0;
  padding: 0;
}

</style>

触发方式

可以配置点击激活或者悬停激活。

将 trigger 属性设置为 click 即可, 默认为 hover。

<script setup>
import { h } from 'vue'
import Dropdown from '@/components/Dropdown/Dropdown.vue'
import Button from '@/components/Button/Button.vue'
const options = [
  { key: 1, label: h('b', 'this is bold') },
  { key: 2, label: 'item2', disabled: true },
  { key: 3, label: 'item3', divided: true },
  { key: 4, label: 'item4' }
]
</script>
<template>
  <div class="basic block">
    <Dropdown
        placement="bottom"
        :menu-options="options"
        trigger="click"
    >
      <Button type="primary"> 点击触发下拉菜单 </Button>
    </Dropdown>
  </div>
</template>

手动打开关闭

将 manual 属性设置为 true 即可, 然后可以使用实例上面的 show 和 hide 方法打开关闭下拉菜单。



<script setup>
import { h, ref } from 'vue'
import Dropdown from '@/components/Dropdown/Dropdown.vue'
import Button from '@/components/Button/Button.vue'
const options = [
{ key: 1, label: h('b', 'this is bold') },
{ key: 2, label: 'item2', disabled: true },
{ key: 3, label: 'item3', divided: true },
{ key: 4, label: 'item4' }
]
const tooltipRef = ref()
const open = () => {
tooltipRef.value?.show()
}
const close = () => {
tooltipRef.value?.hide()
}
</script>
<template>
  <div class="basic block">
    <Dropdown
        placement="bottom"
        :menu-options="options"
        trigger="click"
        manual
        ref="tooltipRef"
    >
      <Button> 菜单容器 </Button>
    </Dropdown>
    <br/><br/>
    <Button type="primary" @click="open"> 点击手动触发显示 </Button>
    <Button type="danger" @click="close"> 点击手动触发隐藏 </Button>
  </div>
</template>

React 用法

tsx
import { Dropdown } from '@bobocn/element/react'
import type { MenuOption } from '@bobocn/element/react'
import '@bobocn/element/style.css'

const menuOptions: MenuOption[] = [
  { key: 1, label: '选项一' },
  { key: 2, label: '选项二' },
  { key: 3, label: '选项三', disabled: true },
  { key: 4, label: '选项四', divided: true },
]

function App() {
  return (
    <Dropdown
      menuOptions={menuOptions}
      trigger="hover"
      onSelect={(item) => console.log('选中:', item)}
    >
      <button>下拉菜单</button>
    </Dropdown>
  )
}

// 点击触发
<Dropdown menuOptions={menuOptions} trigger="click">
  <button>点击展开</button>
</Dropdown>

API

属性 (Attributes)

属性名说明类型默认值
menuOptions菜单选项MenuOption[][]
hideAfterClick点击菜单项后是否隐藏booleantrue
trigger触发方式'hover' | 'click'hover
placement弹出位置'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end'bottom
manual是否手动控制booleanfalse
popperOptionsPopper.js 配置项object
openDelay打开延迟(毫秒)number0
closeDelay关闭延迟(毫秒)number200
transition过渡动画名string

事件 (Events)

事件名说明回调参数
visible-change下拉菜单显示/隐藏时触发(visible: boolean) => void
select选择菜单项时触发(item: MenuOption) => void

插槽 (Slots)

插槽名说明
default触发下拉菜单的元素
content自定义下拉菜单内容

方法 (Exposes)

方法名说明类型
show手动显示下拉菜单() => void
hide手动隐藏下拉菜单() => void

基于 MIT 许可发布