Ant Design Vue V3 Dropdown 下拉菜单

本文介绍了Ant Design Vue V3的Dropdown组件,用于创建下拉菜单。它包含何时使用Dropdown、API详情、Dropdown.Button及其事件。示例展示了如何创建可点击的下拉菜单,包括菜单项和自定义图标,以及处理点击事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

向下弹出的列表。

何时使用 #

当页面上的操作命令过多时,用此组件可以收纳操作元素。点击或移入触点,会出现一个下拉菜单。可在列表中进行选择,并执行相应的命令。

  • 用于收罗一组命令操作。
  • Select 用于选择,而 Dropdown 是命令集合。

API#

#

属性如下

参数说明类型默认值
disabled菜单是否禁用boolean-
getPopupContainer菜单渲染父节点。默认渲染到 body 上,如果你遇到菜单滚动定位问题,试试修改为滚动的区域,并相对其定位。Function(triggerNode)() => document.body
overlay(v-slot)菜单Menu-
overlayClassName下拉根元素的类名称string-
overlayStyle下拉根元素的样式object-
placement菜单弹出位置:bottomLeft bottomCenter bottomRight topLeft topCenter topRightStringbottomLeft
trigger触发下拉的行为, 移动端不支持 hoverArray<click|hover|contextmenu>['hover']
visible(v-model)菜单是否显示boolean-

overlay 菜单使用 Menu,还包括菜单项 Menu.Item,分割线 Menu.Divider

注意: Menu.Item 必须设置唯一的 key 属性。

Dropdown 下的 Menu 默认不可选中。如果需要菜单可选中,可以指定 <Menu selectable>.

 

事件 #

事件名称说明回调参数
visibleChange菜单显示状态改变时调用,参数为 visiblefunction(visible)
参数说明类型默认值版本
disabled菜单是否禁用boolean-
icon右侧的 iconVNode | slot-1.5.0
overlay(v-slot)菜单Menu-
placement菜单弹出位置:bottomLeft bottomCenter bottomRight topLeft topCenter topRightStringbottomLeft
size按钮大小,和 Button 一致string'default'
trigger触发下拉的行为Array<click|hover|contextmenu>['hover']
type按钮类型,和 Button 一致string'default'
visible(v-model)菜单是否显示boolean-
事件名称说明回调参数
click点击左侧按钮的回调,和 Button 一致Function
visibleChange菜单显示状态改变时调用,参数为 visiblefunction(visible)

 

带下拉框的按钮

左边是按钮,右边是额外的相关功能菜单。可设置 icon 属性来修改右边的图标。

<template>
  <div class="demo-dropdown-wrap">
    <a-dropdown-button @click="handleButtonClick">
      Dropdown
      <template #overlay>
        <a-menu @click="handleMenuClick">
          <a-menu-item key="1">
            <UserOutlined />
            1st menu item
          </a-menu-item>
          <a-menu-item key="2">
            <UserOutlined />
            2nd menu item
          </a-menu-item>
          <a-menu-item key="3">
            <UserOutlined />
            3rd item
          </a-menu-item>
        </a-menu>
      </template>
    </a-dropdown-button>
    <a-dropdown-button>
      Dropdown
      <template #overlay>
        <a-menu @click="handleMenuClick">
          <a-menu-item key="1">
            <UserOutlined />
            1st menu item
          </a-menu-item>
          <a-menu-item key="2">
            <UserOutlined />
            2nd menu item
          </a-menu-item>
          <a-menu-item key="3">
            <UserOutlined />
            3rd item
          </a-menu-item>
        </a-menu>
      </template>
      <template #icon><UserOutlined /></template>
    </a-dropdown-button>
    <a-dropdown-button disabled @click="handleButtonClick">
      Dropdown
      <template #overlay>
        <a-menu @click="handleMenuClick">
          <a-menu-item key="1">
            <UserOutlined />
            1st menu item
          </a-menu-item>
          <a-menu-item key="2">
            <UserOutlined />
            2nd menu item
          </a-menu-item>
          <a-menu-item key="3">
            <UserOutlined />
            3rd item
          </a-menu-item>
        </a-menu>
      </template>
    </a-dropdown-button>
    <a-dropdown>
      <template #overlay>
        <a-menu @click="handleMenuClick">
          <a-menu-item key="1">
            <UserOutlined />
            1st menu item
          </a-menu-item>
          <a-menu-item key="2">
            <UserOutlined />
            2nd menu item
          </a-menu-item>
          <a-menu-item key="3">
            <UserOutlined />
            3rd item
          </a-menu-item>
        </a-menu>
      </template>
      <a-button>
        Button
        <DownOutlined />
      </a-button>
    </a-dropdown>
  </div>
</template>
<script>
import { defineComponent } from 'vue';
import { UserOutlined, DownOutlined } from '@ant-design/icons-vue';
export default defineComponent({
  components: {
    UserOutlined,
    DownOutlined,
  },

  setup() {
    const handleButtonClick = e => {
      console.log('click left button', e);
    };

    const handleMenuClick = e => {
      console.log('click', e);
    };

    return {
      handleButtonClick,
      handleMenuClick,
    };
  },

});
</script>
<style lang="less" scoped>
.demo-dropdown-wrap :deep(.ant-dropdown-button) {
  margin-right: 8px;
  margin-bottom: 8px;
}
</style>

 

 

<template>
  <a-dropdown>
    <a class="ant-dropdown-link" @click.prevent>
      Cascading menu
      <DownOutlined />
    </a>
    <template #overlay>
      <a-menu>
        <a-menu-item>1st menu item</a-menu-item>
        <a-menu-item>2nd menu item</a-menu-item>
        <a-sub-menu key="sub1" title="sub menu">
          <a-menu-item>3rd menu item</a-menu-item>
          <a-menu-item>4th menu item</a-menu-item>
        </a-sub-menu>
        <a-sub-menu key="sub2" title="disabled sub menu" disabled>
          <a-menu-item>5d menu item</a-menu-item>
          <a-menu-item>6th menu item</a-menu-item>
        </a-sub-menu>
      </a-menu>
    </template>
  </a-dropdown>
</template>
<script>
import { defineComponent } from 'vue';
import { DownOutlined } from '@ant-design/icons-vue';
export default defineComponent({
  components: {
    DownOutlined,
  },
});
</script>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值