Skip to content

    Dropdown 组件

    Dropdown 适合做操作菜单、工具栏下拉和带图标的选择列表。

    基础用法

    Markdown
    <Dropdown :items="[{ text: '复制', icon: 'copy' }, { text: '重命名', icon: 'edit' }, { text: '删除', icon: 'trash', action: () => {} }]" placement="bottom-start">
      <template #trigger>
        <LinkButton text="操作菜单" variant="outline" />
      </template>
    </Dropdown>

    Items 结构

    items 数组中每项支持以下字段:

    字段类型说明
    textstring显示文本
    iconstring图标名(配合 #icon-{name} 插槽使用)
    linkstring点击后跳转链接
    action() => void点击后执行的回调函数
    disabledboolean禁用该项
    activeboolean高亮激活状态
    dividerboolean作为分隔线渲染(text/icon 等字段被忽略)

    带图标项

    Vue
    <Dropdown :items="iconItems" placement="bottom-start">
      <template #trigger>
        <LinkButton text="带图标菜单" variant="outline" />
      </template>
      <template #icon-copy>
        <svg ...><!-- copy icon --></svg>
      </template>
      <template #icon-external>
        <svg ...><!-- external link icon --></svg>
      </template>
    </Dropdown>

    受控状态

    Markdown
    <script setup>
    import { ref } from 'vue'
    const controlledOpen = ref(false)
    const controlledItems = [{ text: '选项一', action: () => {} }, ...]
    </script>
    
    <Dropdown v-model:open="controlledOpen" :items="controlledItems" placement="bottom">
      <template #trigger>
        <LinkButton :text="controlledOpen ? '关闭菜单' : '打开菜单'" variant="outline" />
      </template>
    </Dropdown>

    v-model:open 控制菜单的打开状态。

    Hover 触发

    trigger="hover" 使菜单在鼠标悬停时打开,移出时关闭。

    自定义尺寸

    :min-width 控制面板最小宽度(默认 180px)。

    Placements

    Props

    参数类型默认值说明
    itemsDropdownItem[][]菜单项数组
    placementbottom | bottom-start | bottom-end | top | top-start | top-endbottom-start面板弹出位置
    triggerclick | hover | bothclick触发方式
    disabledbooleanfalse禁用下拉菜单
    maxHeightnumber320面板最大高度(px)
    minWidthnumber180面板最小宽度(px)
    TypeScript
    export interface DropdownItem {
      text?: string
      link?: string
      icon?: string
      action?: () => void
      divider?: boolean
      disabled?: boolean
      active?: boolean
    }

    Emits

    事件参数说明
    selectitem: DropdownItem用户点击菜单项时触发
    update:openopen: boolean配合 v-model:open 使用

    最后更新于: