AntDesignVue动态创建下拉菜单

news2024/11/18 11:50:57

最近项目需要,有需要动态创建下拉菜单的需求,特此记录一下。

vue版本:3.1.4

ant-design-vue版本:2.1.6

需求是下拉菜单项可以根据配置来控制是否显示,那么就需要用到 v-for 和 v-if 的结合。

v-for 和 v-if 是不能同时应用到元素上面的,所以需要用 template 来承载 v-for,代码如下:

<a-dropdown v-if="moreButtons.length > 0">
  <a-button type="primary" @click.prevent>…</a-button>
  <template #overlay>
    <a-menu @click="dropdownMenuItemClick">
      <template v-for="controlItem in moreButtons">
        <a-menu-item v-if="controlItem.show" :key="controlItem.name">
          {{ controlItem.text }}
        </a-menu-item>
      </template>
    </a-menu>
  </template>
</a-dropdown>

下面的写法也是可以的,v-if 也放到一个单独的template中

<a-dropdown v-if="moreButtons.length > 0">
  <a-button type="primary" @click.prevent>…</a-button>
  <template v-for="controlItem in moreButtons">
    <template v-if="controlItem.show">
      <a-menu-item :key="controlItem.name">{{ controlItem.text }}</a-menu-item>
    </template>
  </template>
</a-dropdown>

需要注意的一点,如果是结合 v-if 判断的话,key 一定要绑定在 a-menu-item 元素上!!!

如下面的代码,虽然可以正常动态显示菜单,但是在点击菜单项项的时候,拿到的 key 都是0。

<a-dropdown v-if="moreButtons.length > 0">
  <a-button type="primary" @click.prevent>…</a-button>
  <template #overlay>
    <a-menu @click="dropdownMenuItemClick">
      <template v-for="controlItem in moreButtons" :key="controlItem.name">
           <a-menu-item v-if="controlItem.show">{{ controlItem.text }}</a-menu-item>
      </template>
    </a-menu>
  </template>
</a-dropdown>

分别点了“按钮1”和“按钮3”,输出的key都是0

 正常应该是点击哪一个按钮,就输出哪一个按钮的key。

如下:

点击“按钮1”,输出的key是 “button1”

点击“按钮3”,输出的key是 “button3”

如果不需要结合 v-if 判断的话,key可以绑定在template上;或者直接去掉template,在a-menu-item上直接 v-for

部分代码如下:

<a-dropdown
  v-if="contextMenuItems.length > 0 || moreContextMenuItems.length > 0"
  :trigger="['contextmenu']"
>
  <template #overlay>
    <a-menu @click="contextMenuItemClick">
      <!--在a-menu-item上 v-for 及 key 绑定-->
      <a-menu-item v-for="menuItem in contextMenuItems" :key="menuItem.name">
        {{ menuItem.text }}
      </a-menu-item>
      <a-sub-menu v-if="moreContextMenuItems.length > 0" key="moreMenus" title="更多...">
      <!--在 template 上 v-for 及 key 绑定-->
        <template v-for="menuItem in moreContextMenuItems" :key="menuItem.name">
          <a-menu-item>{{ menuItem.text }}</a-menu-item>
        </template>
      </a-sub-menu>
    </a-menu>
  </template>
</a-dropdown>

完整代码如下:

<script setup>
import { ref } from 'vue';
const moreButtons = ref([
{
  name: 'button1',
  text: '按钮1',
  show: true,
},
{
  name: 'button2',
  text: '按钮2',
  show: false,
},
{
  name: 'button3',
  text: '按钮3',
  show: true,
},
]);

/**下拉按钮点击事件 */
const dropdownMenuItemClick = (e) => {
  console.log(e);
  //clickEvent(e.key);
};
</script>

<template>
  <a-dropdown v-if="moreButtons.length > 0">
    <a-button type="primary" @click.prevent>…</a-button>
    <template v-for="controlItem in moreButtons">
      <a-menu-item v-if="controlItem.show" :key="controlItem.name">
      {{ controlItem.text }}
      </a-menu-item>
    </template>
  </a-dropdown>
</template>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11501.html

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

相关文章

MOSFET N-CH 30V SM3323NHQAC-TRG、SI7114DN-T1-GE3场效应管

型号&#xff1a;SM3323NHQAC-TRG SM3323NHQAC 描述&#xff1a;N沟道 30V 54A 封装&#xff1a;DFN3x3D-8 型号&#xff1a;SI7114DN-T1-GE3 SI7114DN 描述&#xff1a;MOSFET N-CH 30V 11.7A PPAK1212-8 FET 类型&#xff1a;N 通道 技术&#xff1a;MOSFET&#xff08;金属…

【C++进阶】map和set——中篇(AVL树的学习)

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f341; &…

第8章 数据库连接池

*数据库连接池的基本思想&#xff1a;为数据库建立一个缓冲池&#xff0c;预先在缓冲池中放入一定数量的连接&#xff0c;当需要建立数据库连接时&#xff0c;只需要从缓冲池中取出一个&#xff0c;使用完毕后再放回 *数据库连接池负责分配、管理和释放数据库连接&#xff0c;…

Java 变量和数据类型

Java 变量和数据类型Java 变量Java变量概念变量使用的基本步骤案例&#xff1a;输出人的信息&#xff08;年龄&#xff0c;成绩&#xff0c;性别&#xff0c;姓名&#xff09;变量使用注意事项案例&#xff1a;变量使用注意事项程序中 号的使用案例数据类型整数类型基本介绍案…

Spring Bean的生命周期源码解析

文章目录前言零、Bean生命周期流程图一、加载类二、实例化前2.1、使用案例2.2、源码---InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation()三、实例化3.1、Supplier创建对象3.2、工厂方法创建对象3.3、推断构造方法3.4、源码四、BeanDefinition的后置处理4…

在Ubuntu下安装地球物理学专业软件madagascar

1.下载安装文件 git clone https://github.com/ahay/src RSFSRC这一步搞好后会在当前路径下生成RSFSRC 文件夹 2.预安装 安装依赖软件 sudo apt-get install libxaw7-dev freeglut3-dev libnetpbm10-dev libgd-dev \ libplplot-dev libavcodec-dev libcairo2-dev libjpeg-d…

(设计模式)工厂模式

工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过使用…

【C++】C++基础知识(五)---数组

C基础知识&#xff08;五&#xff09;1. 一维数组1.1 定义方式1.2 数组名用途1.3 案例分析2. 二维数组2.1 定义方式2.2 数组名用途2.3 案例分析3. 多维数组1. 一维数组 数组就是一个集合&#xff0c;里面存放了相同类型的数据元素。 特点&#xff1a; 1、数组中每个元素的数据…

探究并发和并行、同步和异步、进程和线程、阻塞和非阻塞、响应和吞吐等

一. 并发和并行 操作系统扫盲&#xff1a; 1. 对于单核cpu而言(不管单核单线程也好&#xff0c;单核多线程也罢)&#xff0c;同一时间只能干一件事&#xff01;&#xff01;为了看起像可以“同时干多件事”&#xff0c;windows操作系统把cpu的时间划分为长短基本相同的时间区间…

Golang入门笔记(3)—— 运算符

本来这块代码&#xff0c;作为有了一点语言基础的人是真不想写的&#xff0c;因为和其他语言没有什么不同的地方&#xff0c;但是就怕 真的还有人看我的帖子&#xff0c;还真怕真的有初学者在看我帖子&#xff0c;所以还是贴心的抄了一遍。 和Java不同的地方 1. &变量取地址…

【Spring】一文带你吃透基于XML的DI技术

个人主页&#xff1a; 几分醉意的CSDN博客_传送门 文章目录&#x1f496;基于XML的DI✨set注入&#x1f4ab;基本语法&#x1f4ab;和属性名无关&#x1f4ab;给非自定义类属性赋值&#x1f4ab;引用类型注入✨构造注入&#x1f4ab;name属性&#x1f4ab;index属性✨引用类型的…

哈希表(hash_table)的原理

一、hash_table的介绍 hash_table可提供对任何键值对的存取和删除操作。由于操作对象是键值对&#xff0c;所以hash table也可被视为一种字典结构(dictionary)。这种结构的用意在于提供常数时间的基本操作&#xff0c;就像stack或queue那样。乍听之下这几乎是不可能的任务&…

SpringBoot中使用Redis实现分布式锁

文章目录一。Redis实现分布式锁原理二。代码实现Redis分布式锁一。Redis实现分布式锁原理 以下内容为转载部分&#xff0c;主要介绍Redis实现分布式锁的背景&#xff1a; 转载博客&#xff1a;https://blog.csdn.net/fuzhongmin05/article/details/119251590 为什么需要分布式…

[附源码]计算机毕业设计JAVA高校创新创业项目管理系统

[附源码]计算机毕业设计JAVA高校创新创业项目管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM…

数字化转型重塑企业竞争优势,SaaS电商系统助力锂电池行业实现降本增效

作为我国核心基础工业的关键材料之一&#xff0c;锂电池在汽车、医疗器械、航天航空、消费类电子产品等领域均可发挥重要作用。近年来&#xff0c;随着新能源汽车的快速发展有力带动了锂电池行业的市场需求&#xff0c;锂电池已成为化学电源应用领域中最具竞争力的电池&#xf…

Vue | Vue.js 实现过渡动画

&#x1f5a5;️ Vue .js专栏&#xff1a;Vue .js 实现过渡动画 &#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; ✨ 个人主页&#xff1a;CoderHing的个人主页 &#x1f340; 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ &#x1f44…

基于51单片机的智能路灯控制系统proteus仿真原理图PCB

功能&#xff1a; 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/环境光强/工作模式 2.支持路灯故障检测 3.工作时间内(17~24时)&#xff0c;两个路灯同时点亮&#xff0c;24时以后&#xff0c;B路灯关闭&#xff0c;若检测到由物体通过&#xff0c;路灯B点亮…

R17 redcap

微信同步更新欢迎关注同名modem协议笔记 在5G时代&#xff0c;某些场景的终端并不需要特别复杂&#xff0c;只要满足成本低&#xff0c;功耗小&#xff0c;尺寸小等要求即可&#xff0c;例如视频监控&#xff0c;可穿戴设备&#xff0c;工业无线传感器等&#xff0c;redcap就是…

electron vue 模仿qq登录界面

1、使用vuecli创建vue项目 我用的vue2 vue create qq_test2、安装electron npm install electron -g //or npm install electron12.0.11 //老版本3、vue项目安装Electron-builder打包工具 版本我选择的是12 vue add electron-builder4、在vue项目的src下有个background.…

收藏|多指标时序预测方式及时序特征工程总结

背景 现如今&#xff0c;随着企业业务系统越来越复杂&#xff0c;单指标时间序列预测已不能满足大部分企业需求。在复杂的系统内&#xff0c;如果采用单一的指标进行时间序列预测&#xff0c;由于各个指标相互作用的关系&#xff0c;因此会因为漏掉部分指标因素导致出现预测精…