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

news2025/4/28 8:21:13

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.coloradmin.cn/o/2343705.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    Linux麒麟 V10 系统找回 root 密码的步骤

    Linux麒麟 V10 系统找回 root 密码的步骤 1 环境介绍2 操作步骤2.1重启系统并进入 GRUB 菜单2.2 输入 GRUB 账户密码2.3 修改启动参数2.4 启动系统2.5 修改root 密码2.6 重启系统 3 Linux命令全方位指南实战教程Linux命令学习使用列表 1 环境介绍 有时候root 密码忘记&#xf…

    stone 3d v3.3.0版本发布,含时间线和连接器等新功能

    1.新加了时间线&#xff08;timeline&#xff09;编辑器&#xff0c;可以类似blender一样给对象制作动画 2.新加了度量&#xff08;metrics&#xff09;系统&#xff0c;通过scene对象检测器中的useMetrics属性来启用或禁用&#xff0c;启用时所选物体将显示三维度量数据 新加了…

    .whl文件

    本文主要介绍了.whl文件的定义&#xff0c;怎么安装.whl文件&#xff08;离线&#xff0c;在线&#xff09;。 怎么查看cuda的版本&#xff0c;以及如何安装相应版本的cuda&#xff08;本地电脑&#xff0c;超算上&#xff09; 以及如何创建.whl文件 .whl文件的定义 Document…

    Git命令行中vim的操作

    Git命令行用vim打开文件&#xff0c;或者用其他git命令打开了文件&#xff0c;需要编辑和保存文件等&#xff0c;有些命令表情奇怪&#xff0c;往往容易忘记这些命令。记录下。 下面这篇比较实用和简练&#xff1a; gitvim编辑文件命令 • Worktile社区https://worktile.com/…

    C#初级知识总结

    一、什么是CIL 1.CIL(Common Intermidate Language)是指.Net的公共中间语言&#xff0c;它是一种编程语言。 .Net框架的各种语言在编译时都会编译成同一种中间语言&#xff08;CIL&#xff09;&#xff0c;之后程序运行的时候CIL会被JIT(Just In Time)转换为二进制语言&#xf…

    Linux学习笔记之环境变量

    写这篇博客的目的主要是因为本人学习动静态库时&#xff0c;用到了环境变量的知识&#xff0c;发现略有遗忘&#xff0c;因此回顾复习&#xff0c;整理成博客。 一、环境变量是什么 Linux环境变量是存储系统或程序运行时配置信息的特殊变量&#xff0c;用于为程序提供配置参数…

    16:00开始面试,16:08就出来了,问的问题有点变态。。。

    从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到4月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

    私钥连接服务器(已经有服务器私钥

    前言&#xff1a;假设我们已经有了服务器的私钥&#xff0c;我们怎么配置呢&#xff1f; 下面我会从vsc的配置角度来写 ✅ 步骤一&#xff1a;准备工作 安装 VS Code&#xff08;如果还没装&#xff09; &#x1f449; https://code.visualstudio.com/ 安装插件&#xff1a;Re…

    学员答题pk知识竞赛小程序怎么做

    制作学员答题PK知识竞赛小程序&#xff0c;主要有以下步骤&#xff1a; 一、规划设计 明确需求&#xff1a;确定小程序的使用场景是校园知识竞赛、培训机构考核还是企业内部培训等。答题功能&#xff0c;规定答题的具体规则&#xff0c;包括题目类型&#xff08;单选、多选、…

    外观模式:简化复杂系统接口的设计模式

    外观模式&#xff1a;简化复杂系统接口的设计模式 一、模式核心&#xff1a;为复杂子系统提供统一简单接口 当一个系统由多个复杂子系统组成时&#xff08;如电商系统中的支付、物流、库存模块&#xff09;&#xff0c;客户端直接调用子系统会导致依赖关系复杂、代码难以维护…

    uniapp-商城-36-shop 购物车 选好了 进行订单确认2 支付方式颜色变化和颜色滤镜filter

    颜色滤镜&#xff0c;在好多网页都这样使用&#xff0c;滤掉彩色&#xff0c;显示黑白&#xff0c;这在一些关键的日子中都这样使用。 1、依然回到订单确认页面 看到支付的颜色了嘛&#xff1f; <view class"payType"><view class"box" :class&q…

    Vue3 上传后的文件智能预览(实战体会)

    目录 前言1. Demo12. Demo2 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn 此处的基本知识涉及较少&#xff0c;主要以Demo的形式供大…

    CCE13.【C++ Cont】练习题组13 静态链表专题

    目录 1.B3630 排队顺序 题目 分析 代码 提交结果 2.B3631 单向链表 题目 分析 前置知识:map数组加快访问速度(简单的哈希表优化) 使用map数组的重要提醒 代码 提交结果 3.★P1160 队列安排 题目 分析 方法1:带头不循环双向链表的设计 方法2:带头循环的双向链表…

    内联函数(c++)

    预处理&#xff1a;优点&#xff1a;内嵌到目标代码&#xff0c;减少函数的调用。 缺点&#xff1a;在预处理阶段完成替换&#xff0c;避免了语义上的差错。 egg&#xff1a; #define SQR(X) ((X)*(X)) 函数&#xff1a;优点&#xff1a;完成了某一类操作的抽象&#xff0c;…

    R7周:糖尿病预测模型优化探索

    &#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 一、数据预处理 1.设置GPU import torch.nn.functional as F import torch.nn as nn import torch, torchvisiondevice torch.device("cuda"…

    线程怎么创建?Java 四种方式一网打尽

    &#x1f680; Java 中线程的 4 种创建方式详解 创建方式实现方式是否推荐场景说明1. 继承 Thread 类class MyThread extends Thread❌ 不推荐简单学习、单线程场景2. 实现 Runnable 接口class MyRunnable implements Runnable✅ 推荐更适合多线程共享资源3. 实现 Callable 接…

    STM32之DHT11温湿度传感器---附代码

    DHT11简介 DHT11的供电电压为 3&#xff0d;5.5V。 传感器上电后&#xff0c;要等待 1s 以越过不稳定状态在此期间无需发送任何指令。 电源引脚&#xff08;VDD&#xff0c;GND&#xff09;之间可增加一个100nF 的电容&#xff0c;用以去耦滤波。 DATA 用于微处理器与DHT11之间…

    工业相机——镜头篇【机器视觉,图像采集系统,成像原理,光学系统,成像光路,镜头光圈,镜头景深,远心镜头,分辨率,MTF曲线,焦距计算 ,子午弧矢】

    文章目录 1 机器视觉&#xff0c;图像采集系统2 相机镜头&#xff0c;属于一种光学系统3 常规镜头 成像光路4 镜头光圈5 镜头的景深6 远心镜头 及 成像原理7 远心镜头种类 及 应用场景8 镜头分辨率10 镜头的对比度11 镜头的MTF曲线12 镜头的焦距 计算13 子午弧矢 图解 反差 工业…

    openwrt查询网关的命令

    方法一&#xff1a;route -n 方法二&#xff1a;ip route show

    华为OD机试真题——查找接口成功率最优时间段(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

    2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式&#xff1b; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析&#xff1b; 本文收录于专栏&#xff1a;《2025华为OD真题目录…