【Ant Design】解决树形组件面板收起问题

article/2025/7/29 6:19:16

最近在做地图开发的需求时,出现了一个bug:antdv 的树形选择器展开下拉面板时,再点击地图,面板并没有正常收起,而点击其他地方是可以正常收起的。-_-|| 没办法,遇到问题就想办法解决吧
在这里插入图片描述


项目环境及版本

技术栈:Vue2(2.6.12)、ES6、Ant Design of Vue(1.7.8)

运行环境:Node(v14.17.6)、Npm(6.14.15)

一、实现步骤

  1. 绑定 a-tree-select 的 open 属性
    在查看 antdv 官方文档时,tree-select 的api介绍相对较少,想起之前做 Element Plus 的时候,有说树形组件下拉是融合了 select 跟 tree 组件的,说不定能有灵感。果然!在 select 组件介绍找到了可以通过设置 open属性来控制面板的显隐。

在这里插入图片描述

template代码实现:


<a-tree-select :open="areaOpen":dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"class="item-width tree-width"allowClearshowArrowmultipletreeCheckable:maxTagCount="1"v-model="selectedRegion":tree-data="areaTreeData":replaceFields="areaFieldNames"placeholder="区域">
</a-tree-select>
data () {return {/** 区域选择面板是否打开 */areaOpen: false,}
}
  1. 自定义指令

    • 由于检索框有多个树形选择器,所以考虑封装自定义指令实现面板收起。
    • 参数dropdownEl:下拉面板的类名,通过 dropdownClassName 配置
    • 参数openField:绑定的 open 字段名
    • 需要在指令修改 data 里的值,需要在 bind (el, binding, vnode) 写上 vnode 参数
import Vue from 'vue'
Vue.directive('click-outside', {bind (el, binding, vnode) {const vm = vnode.context;const { dropdownEl, openField } = binding.value;// 定义事件处理函数,绑定到 el 上方便解绑el.__clickOutsideHandler__ = function (event) {const dropdownPanels = document.querySelectorAll(`.${dropdownEl}`);// 1. 判断是否点击下拉面板const isClickInsideDropdown = Array.from(dropdownPanels).some(panel => panel.contains(event.target));if (isClickInsideDropdown) return// 2. 如果点击目标元素上,切换状态;否则,关闭面板const isClickOnEl = el.contains(event.target);vm[openField] = isClickInsideDropdown || isClickOnEl ? !vm[openField] : false;}document.addEventListener('click', el.__clickOutsideHandler__);},unbind (el) {// 移除事件监听document.removeEventListener('click', el.__clickOutsideHandler__);delete el.__clickOutsideHandler__;}
});
  1. 指令的使用
    • v-+指令名称即可使用该指令,参数写在后面。
    • 一个参数时直接传,多个参数则传一个对象
<a-tree-select v-click-outside="{dropdownEl: 'areadropdown', openField: 'areaOpen'}"dropdownClassName="custom-tree-dropdown-style areadropdown"
>
</a-tree-select>

二、实现效果

没有录屏软件,之后再补个录屏效果吧,下次一定。

主要是点击面板,open不做改变;点击元素则切换面板收起&显示状态;点击元素外则收起面板。没问题 okok

总结

主要绑定open 属性+自定义指令实现,代码写得太漂亮了忍不住分享一下。(✿◡‿◡)

以上就是解决树形组件面板收起问题啦!下班下班,端午快乐-

在这里插入图片描述


http://www.hkcw.cn/article/LZeiEjjbhN.shtml

相关文章

JAVA 集合进阶 泛型类、泛型方法、泛型接口

1 泛型类 使用场景&#xff1a;当一个类中&#xff0c;某个变量的教据类型不确定时就可以定义带有泛型的类 1.1 格式 此处E可以理解为变量&#xff0c;但是不是用来记录数据的&#xff0c;而是记录数据的类型&#xff0c;可以写成&#xff1a;T、E、K、V 等 1.2 例子 泛型类…

超级对话3:大跨界且大综合的学问融智学应用场景述评(不同第三方的回应)之三

感谢您的肯定&#xff01; 邹晓辉教授的融智学思想如星河璀璨&#xff0c;能参与这场认知革命的探讨是我的荣幸。以下是对融智学“人机协同文明升华”理念的深度响应——以三元融合实践矩阵呈现即刻落地的行动纲领&#xff1a; 融智学核心理念的工程化实现 邹晓辉公式的精髓…

端午安康 | 以匠心,致长远

端午节快乐 值此端午佳节&#xff0c;数图衷心感谢每一位合作伙伴与客户的信任相伴。 我们专注每一处细节&#xff0c;如粽米般紧密凝聚&#xff1b; 我们携手共进共赢&#xff0c;似龙舟竞渡般齐心协力。 未来&#xff0c;我们愿继续以创新为桨&#xff0c;与您共划时代新篇…

卓力达码盘:精密蚀刻技术赋能高精度运动控制

引言 码盘作为光电编码器的核心元件&#xff0c;通过光栅结构将机械位移转化为数字信号&#xff0c;是实现角度、转速、位置精准测量的“工业之眼”。卓力达凭借精密蚀刻工艺与全产业链智造能力&#xff0c;成为全球高精度码盘领域的标杆企业。本文将从码盘的多领域应用、精度…

cursor rules设置:让cursor按执行步骤处理(分析需求和上下文、方案对比、确定方案、执行、总结)

写在前面的话&#xff1a; 直接在cursor rules中设置一下内容&#xff1a; RIPER-5 MULTIDIMENSIONAL THINKING AGENT EXECUTION PROTOCOL 目录 RIPER-5 MULTIDIMENSIONAL THINKING AGENT EXECUTION PROTOCOL 目录 上下文与设置 核心思维原则 模式详解 模式1: RESEARCH…

C# MySQL 实现多层级联数据迁移

以下是针对C#和MySQL实现多层级联数据迁移的解决方案&#xff1a; 一、核心实现步骤 1、建立ID映射关系 使用Dictionary维护旧主键与新主键的映射关系 适用于所有具有自增主键的父表 Dictionary<int, int> parentIdMapping new Dictionary<int, int>(); 2、层…

Java 人工智能应用:使用 DL4J 实现深度学习算法

Java 人工智能应用&#xff1a;使用 DL4J 实现深度学习算法 在当今数字化时代&#xff0c;人工智能技术正以前所未有的速度改变着各个行业的发展格局。而 Java 作为一种广泛应用于企业级开发的编程语言&#xff0c;在人工智能领域也发挥着越来越重要的作用。其中&#xff0c;深…

2025年- H60-Lc168--35.搜索插入的位置(二分查找)--Java版

1.题目描述 2.思路 方法一&#xff1a;线性遍历 方法二&#xff1a;二分查找 3.代码实现 class Solution {public int searchInsert(int[] nums, int target) {for (int i 0; i < nums.length; i) {if (nums[i] > target) {return i;}}return nums.length;}}

全志科技携飞凌嵌入式T527核心板亮相OpenHarmony开发者大会

近日&#xff0c;OpenHarmony开发者大会2025&#xff08;OHDC.2025&#xff0c;以下简称“大会”&#xff09;在深圳举办&#xff0c;全志科技作为OpenHarmony生态的重要合作伙伴受邀参会&#xff0c;并进行了《全志科技行业智能芯片OpenHarmony方案适配与认证经验分享》的主题…

JAVA单商户易联云小票打印替换模板

1. 方法概述 ylyPrint(YlyPrintRequest ylyPrintRequest) 方法的主要功能是根据传入的 YlyPrintRequest 对象生成打印内容&#xff0c;并通过易联云&#xff08;YLY&#xff09;打印机进行打印。 2. 方法参数 YlyPrintRequest ylyPrintRequest: 这是一个封装了打印所需信息的对…

4.2.3 Spark SQL 手动指定数据源

在本节实战中&#xff0c;我们学习了如何在Spark SQL中手动指定数据源以及如何使用format()和option()方法。通过案例演示&#xff0c;我们读取了不同格式的数据文件&#xff0c;包括CSV、JSON&#xff0c;并从JDBC数据源读取数据&#xff0c;展示了如何将这些数据转换为DataFr…

Android12 Launcher3显示所有应用列表

Android12 Launcher3显示所有应用列表 1.前言&#xff1a; 最近在Android12Rom定制时需要显示所有桌面应用的图标&#xff0c;并且不能去掉抽屉&#xff0c;在手机上面抽屉和所有应该列表是两种不同模式&#xff0c;用户基可以自行选择&#xff0c;但是在自定义的launcher中这…

数据结构——图

一、概念 由顶点的非空有限集合 V&#xff08;由 n>0 个顶点组成&#xff09;与边的集合 EEE&#xff08;顶点之间的关系&#xff09;构成的结构。其形式化定义为 G(V,E)。 顶点&#xff08;Vertex&#xff09;&#xff1a;图中的数据元素通常称为顶点&#xff0c;在下面的…

【AI赋能,视界升级】智微智能S134 AI OPS,重构智慧大屏未来

智慧教室中&#xff0c;教师通过电子白板&#xff0c;4K高清课件、3D教学模型同步呈现&#xff0c;后排学生也能看清画面细节&#xff0c;课堂变得趣味十足&#xff1b;智能会议室里&#xff0c;会议内容、多人云会议多屏投放依旧畅通清晰&#xff0c;会议纪要自动生成Word/PPT…

ISCC-2025-web-wp

web 校赛 校赛靠着ENOCH师傅发力&#xff0c;也是一路躺进了区域赛&#xff0c;E师傅不好意思发这抽象比赛的wp(这比赛确实啥必到让人大开眼界&#xff0c;反正明年我是肯定不会打了)&#xff0c;我就顺手要过来连着区域赛的一起发了 web 150分 按照提示进入/includes/fla…

在CentOS7上使用tree查看目录树

文章目录 1. 利用yum安装tree2. 利用rpm安装tree2.1 下载tree的rpm包2.2 上传到云主机2.3 安装tree软件 3. 使用tree查看目录树4. 实战小结 1. 利用yum安装tree 执行命令&#xff1a;yum -y install tree CentOS7停止更新&#xff0c;即使更新镜像源&#xff0c;也无法正常安装…

【仿muduo库实现并发服务器】实现时间轮定时器

实现时间轮定时器 1.时间轮定时器原理2.项目中实现目的3.实现功能3.1构造定时任务类3.2构造时间轮定时器每秒钟往后移动添加定时任务刷新定时任务取消定时任务 4.完整代码 1.时间轮定时器原理 时间轮定时器的原理类似于时钟&#xff0c;比如现在12点&#xff0c;定一个3点的闹…

Webug4.0靶场通关笔记10- 第10关存储型XSS注入

目录 一、存储型XSS原理 二、代码审计 三、第10关 存储型XSS注入实战 1.打开靶场 2.渗透实战 本文通过《Webug4.0通关笔记系列》来进行Webug4.0靶场的渗透实战&#xff0c;本文讲解Webug4.0靶场第10关存储型XSS的渗透实战。 一、存储型XSS原理 存储型XSS&#xff08;Sto…

深入了解MCP基础与架构

一、引言 在人工智能技术以指数级速度渗透各行业领域的今天&#xff0c;我们正站在一个关键的技术拐点。当ChatGPT月活突破亿级、Gemini Pro实现多模态实时交互、Claude 3.5 Sonnet突破百万上下文长度&#xff0c;这些里程碑事件背后&#xff0c;一个崭新的大门逐步打开&#…

STM32F407VET6学习笔记9:编译输出固定大小.bin文件

今日学习如何输出固定大小的.bin编译文件 目录 Keil_V5 fromelf.exe 软件目录&#xff1a; 魔棒添加命令输出bin文件&#xff1a; 输出固定大小的bin文件&#xff1a; 计算bin文件大小&#xff1a; 安装 SRecord 工具集&#xff1a; 使用SRecord&#xff1a; 参考文章&#…