当前位置: 首页 > ds >正文

ElementUi的Dropdown下拉菜单的详细介绍及使用

Dropdown是 ElementUI 中用于创建下拉菜单项的一个组件,通常el-dropdown-item 包裹在 el-dropdown 组件中使用。以下从功能特性(一些属性及方法)、使用和高级功能(高亮显示,滚动,额外传参数)三个方面进行详细介绍。

一、功能特性

1.触发方式多样

支持 click(点击触发)和 hover(悬停触发)两种方式。

2.命令值传递

通过 command 属性为菜单项设置唯一标识,点击时触发 command 事件并传递该值,便于区分不同选项。

3.动态控制显示

使用 visible-change 事件监听下拉菜单的显示/隐藏状态变化。

通过 visible 属性(需配合 ref)或 showPopper 属性(需配合 el-dropdown-menu 的 ref)手动控制下拉菜单的显示与隐藏。

4.样式与交互优化

支持图标、分割线、禁用状态等样式配置。常用属性:icon: 图标类名,设置菜单项的图标;divided: 是否在菜单项上方显示分割线;disabled: 是否禁用该菜单项。

可通过 hide-on-click 属性控制点击菜单项后是否自动关闭下拉菜单。

二、使用方法

1. 基础用法

<template><el-dropdown @command="handleCommand"><span class="el-dropdown-link">下拉菜单<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item command="a">选项1</el-dropdown-item><el-dropdown-item command="b" divided>选项2</el-dropdown-item><el-dropdown-item command="c" icon="el-icon-check">选项3</el-dropdown-item><el-dropdown-item command="d" disabled>禁用选项</el-dropdown-item></el-dropdown-menu></el-dropdown>
</template><script>
export default {methods: {handleCommand(command) {console.log('点击了菜单项:', command);// 根据 command 执行不同操作if(command=="a"){// ...},if(command=="b"){},// ...}}
}
</script>

2.动态数据绑定

<template><el-dropdown @command="handleCommand"><span class="el-dropdown-link">{{ selectedOption || '请选择' }}<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item v-for="item in options" :key="item.value" :command="item.value">{{ item.label }}</el-dropdown-item></el-dropdown-menu></el-dropdown>
</template><script>
export default {data() {return {selectedOption: '',options: [{ label: '选项A', value: 'a' },{ label: '选项B', value: 'b' },{ label: '选项C', value: 'c' }]}},methods: {handleCommand(command) {this.selectedOption = this.options.find(item => item.value === command).label;}}
}
</script>

3. 自定义内容

<el-dropdown-menu slot="dropdown"><el-dropdown-item><i class="el-icon-upload"></i><span>上传文件</span></el-dropdown-item><el-dropdown-item><el-badge :value="12" class="item"><i class="el-icon-message"></i><span>消息</span></el-badge></el-dropdown-item>
</el-dropdown-menu>

三、高级功能

1.当前项高亮

通过动态绑定 class 和 selectedCommand 变量实现

<template><el-dropdown @command="handleCommand"><span class="el-dropdown-link">高亮示例</span><el-dropdown-menu slot="dropdown"><el-dropdown-item v-for="item in options" :key="item.value" :command="item.value":class="{ 'highlight': selectedCommand === item.value }">{{ item.label }}</el-dropdown-item></el-dropdown-menu></el-dropdown>
</template><script>
export default {data() {return {selectedCommand: '',options: [{ label: '选项1', value: 'a' },{ label: '选项2', value: 'b' },{ label: '选项3', value: 'c' }]}},methods: {handleCommand(command) {this.selectedCommand = command;}}
}
</script><style>
.highlight {background-color: #f0f0f0;color: #409EFF;
}
</style>

2.智能滚动定位

当菜单项过多时,可通过 ref 和 this.$nextTick 实现滚动到指定项

<template><el-dropdown ref="dropdownRef" @visible-change="handleVisibleChange"@command="handleCommand"><span class="el-dropdown-link">滚动示例</span><el-dropdown-menu ref="dropdownMenuRef" slot="dropdown"><el-dropdown-item v-for="item in largeOptions" :key="item.value" :command="item.value">{{ item.label }}</el-dropdown-item></el-dropdown-menu></el-dropdown>
</template><script>
export default {data() {return {selectedCommand: 'a', // 默认选中第一项largeOptions: Array.from({ length: 20 }, (_, i) => ({label: `选项${i + 1}`,value: String.fromCharCode(97 + i) // a, b, c, ...}))}},methods: {handleCommand(command) {this.selectedCommand = command;},handleVisibleChange(isVisible) {if (isVisible) {this.$nextTick(() => {const dropdownMenu = this.$refs.dropdownMenuRef.$el;const highlightedItem = dropdownMenu.querySelector('.highlight');if (highlightedItem) {highlightedItem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });}});}}}
}
</script><style>
.highlight {background-color: #f0f0f0;color: #409EFF;
}
</style>

3.传递额外参数

通过对象传递 command 值,结合解构赋值处理

<template><el-dropdown @command="handleCommand"><span class="el-dropdown-link">额外参数示例</span><el-dropdown-menu slot="dropdown"><el-dropdown-item v-for="item in opBtns" :key="item.value" :command="{ command: item.value, row: { id: 1, name: '示例' } }">{{ item.text }}</el-dropdown-item></el-dropdown-menu></el-dropdown>
</template><script>
export default {data() {return {opBtns: [{ value: 'edit', text: '编辑' },{ value: 'delete', text: '删除' }]}},methods: {handleCommand({ command, row }) {console.log('操作类型:', command);console.log('行数据:', row);}}
}
</script>

    注意:

    属性绑定语法:command 属性必须使用 v-bind(简写为 :)绑定,否则无法解析变量。

    触发方式限制:trigger 属性不能使用 v-bind 绑定,否则会报错。

    样式覆盖:若需深度自定义样式,可使用 ::v-deep 或 /deep/ 选择器。

    性能优化:大数据量时,建议使用虚拟滚动或分页加载。
     若文章对你有帮助,点赞、收藏加关注吧!


     

    http://www.xdnf.cn/news/2016.html

    相关文章:

  1. 软件测试大模型Agent探索(dify:chatflow+企业微信机器人)
  2. 【C++类和数据抽象】复制构造函数
  3. SIEMENS PLC 程序 GRAPH 程序解读 车型入库
  4. 【深度强化学习 DRL 快速实践】近端策略优化 (PPO)
  5. mybatis-plus里的com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析
  6. Python Cookbook-6.8 避免属性读写的冗余代码
  7. (PYTHON)函数
  8. 多物理场耦合低温等离子体装置求解器PASSKEy2
  9. uniapp小程序开发入门01-快速搭建一个空白的项目并预览它
  10. 多模态(3):实战 GPT-4o 视频理解
  11. 线上图书借阅小程序源码介绍
  12. 系统测试的技术要求
  13. 基于Docker的Flask项目部署完整指南
  14. 基于C#+Unity实现遇见李白小游戏
  15. 《强势量价关系》速读笔记
  16. 【信息系统项目管理师】高分论文:论人力资源管理与成本管理(医院信息系统)
  17. 【Python数据分析】Pandas模块之pd.concat 函数
  18. 【Agent】LangManus深度解析:AI自动化框架的对比与langgraph原理
  19. openwrt查询网关的命令
  20. Flink部署与应用——部署方式介绍
  21. 更智能的银行体验:生成式 AI 与语义搜索的实际应用
  22. windows服务器及网络:搭建FTP服务器
  23. 【AIGC】基础篇:VS Code 配置 Python 命令行参数调试debug超详细教程
  24. DeepSeek 赋能全流程数据治理:构建智能化数据价值链
  25. vue3中的effectScope有什么作用,如何使用?如何自动清理
  26. 传感器模块有助于加速嵌入式视觉开发
  27. 最新大模型算法的研究进展与应用探索
  28. SIEMENS PLC程序解读 -BLKMOV (指定长度数据批量传输)
  29. 六、web自动化测试02
  30. 0基础 | Proteus仿真 | 51单片机 | 继电器