elementplus的cascader级联选择器在懒加载且多选时的一些问题分析

1. 背景

在之前做的一个项目中使用到了element的级联选择器,并且是需要懒加载、多选、父子不关联等等,在选的时候当然没问题,但是回显的时候就会回显不出来,相信大部分伙伴都遇到过这个问题。我在以前出过一篇文章写过关于级联选择器在动态加载时的回显解决。el-cascader级联选择器动态加载时的回显解决-源码解析
我在当时提出了两种解决方案,第一种是“初始化时调接口渲染panel”,第二种是“改交互”。在element-plus中的级联选择器的动态加载中,其实是支持了回显的,用的方法其实就是第一种“初始化时调接口渲染panel”。现在看看element和elemengplus中cascader的区别。

2. 问题

2.1 elementplus中cascader级联选择器的回显

2.1.1 elementplus的cascader本身就支持回显了

在element和elemengplus中的cascader的initStore方法有一个重要区别:

elementUI:

图1

element-plus: 看图2,在element-plus中新加了一个syncCheckedValue方法,光看这个名字就知道大概的功能,异步选中节点的值。再看图3,有一个forEach方法,然后递归调用lazyLoad方法,将syncCheckedValue方法作为回调函数传入lazyLoad方法。再看图4的lazyLoad方法,将syncCheckedValue方法在resolve中调用了。总之,这几个方法运行后就会回显懒加载的数据。

图2

图3

 

图4 

但是正如我之前在那篇文章里说的,多选时这种做法是不现实的,只有单选的时候适用。

图5 

2.2.2 我的解决方法

如我之前那篇文章所示,我也是通过改交互,并且借鉴了之前说过的lazyCascader的交互,但是具体逻辑改成了适用于我们业务的逻辑。具体组件如下所示。核心逻辑就是把回显框与选择的panel解偶。具体代码大家可以访问我上面那篇文章链接,里面有贴lazyCascader的地址。

图6 

2.2 cascader多选时选中节点后会回弹到顶部选中节点处

2.2.1 scrollIntoView

死去的回忆突然攻击我!最近在用elementplus的cascader懒加载回显,又遇到了这个问题。之前在vue2就遇到过这个问题,所以我一下就找到了原因,全是因为cascader中的这个函数:

scrollIntoView

图7 

这个问题在社区的issue中有很多个朋友问过。有element的,也有elementPlus中的。关于为什么会执行这个syncMenuState方法,具体看这个issue的评论区的回答。[Bug Report] el-cascader 选中会自动跳到第一次选中位置 #21947

先说一下我的情况,我的情况是我没用cascader的lazy方法,而是自己将接口请求回的数据用递归塞到了options里,就导致了options的变化。然后见如下elementPlus中cascade的源码执行顺序:

options变化 -> initStore -> syncCheckedValue -> syncMenuState -> scrollToExpandingNode -> scrollIntoView

所以我这种情况,因为人为修改了options,并不是组件内部自己去用懒加载方式去处理options。那么这个函数按照源代码逻辑是必会执行的。

图8

 

图9 

图10

 

图11

 

图12 

2.2.2 解决方法

我这个解决方法有点不讲武德,直接copy源代码到本地,scrollIntoView注释掉。我在vue2和vue3两个版本都是这样干的。但是我是因为我的逻辑必定会触发scrollIntoView方法,其余情况大家看下是不是自己的options和value值处理得不对。

vue2: 10月前。

图13 

vue3: 

图14 

复制下来用需要修改一下源码的一些引入路径。

比如这种,在源代码中写的是相对路径../store.mjs,那么需要将这种全部改为绝对路径,让资源去从nodemodule的element-plus中找。

图15 

3. 总结

这就是最近使用elementPlus的cascader遇到的两个问题,希望能帮助到大家。ps:我发现遇到这种第三方库的问题去github上看issue还是挺有用的,之前时间选择器遇到个问题也是去issue里找到的,怪不得大家在技术选型时都要提倡所选的库要社区活跃。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于PySide6的CATIA零件自动化着色工具开发实践

引言 在汽车及航空制造领域,CATIA作为核心的CAD设计软件,其二次开发能力对提升设计效率具有重要意义。本文介绍一种基于Python的CATIA零件着色工具开发方案,通过PySide6实现GUI交互,结合COM接口操作实现零件着色自动化。该方案成…

Uniapp项目运行到微信小程序、H5、APP等多个平台教程

摘要:Uniapp作为一款基于Vue.js的跨平台开发框架,支持“一次开发,多端部署”。本文将手把手教你如何将Uniapp项目运行到微信小程序、H5、APP等多个平台,并解析常见问题。 一、环境准备 在开始前,请确保已安装以下工具…

ROS分布式部署通信

目录 一、概念 二、设置 ROS 分布式网络 1. 环境要求 2. 主机(Master)设置 3. 从机(节点设备)设置 4. 测试是否正常通信 三、进阶启动多从机节点(launch)。 一、概念 ROS 分布式通信用于在多台计算机…

qt open3dAlpha重建

qt open3dAlpha重建 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionAlpha_triggered();//alpha重建 void MainWindow::

我的三维引擎独立开发之路:坚持与迷茫

今天终于解决了,之前开发的基于threeceisum开发的融合引擎Merge3D,引用threejs版本过低的问题,也算又前进了一步! 有人说,直接用最新版本不就行了,哎关键之前版本怎么办哪,很多不兼容性,需要一个…

【ArcGIS】地理坐标系

文章目录 一、坐标系理论体系深度解析1.1 地球形态的数学表达演进史1.1.1 地球曲率的认知变化1.1.2 参考椭球体参数对比表 1.2 地理坐标系的三维密码1.2.1 经纬度的本质1.2.2 大地基准面(Datum)的奥秘 1.3 投影坐标系:平面世界的诞生1.3.1 投…

数据分析人员需要掌握sql到什么程度?

学习SQL三个层次 熟悉基本的增删改查语句及函数,包括select、where、group by、having、order by、delete、insert、join、update等,可以做日常的取数或简单的分析(该水平已经超过90%非IT同事);掌握并熟练使用高阶语法&#xff0…

简洁实用的3个免费wordpress主题

高端大气动态炫酷的免费企业官网wordpress主题 非常简洁的免费wordpress主题,安装简单、设置简单,几分钟就可以搭建好一个wordpress网站。 经典风格的免费wordpress主题 免费下载 https://www.fuyefa.com/wordpress

golang从入门到做牛马:第一篇-我与golang的缘分,go语言简介

还记得2018年的夏天,刚毕业的我不知道该做些什么,于是自学了一周的go语言,想要找一份go语言工作的代码,当时的go还没有go mod来管理依赖包,在北京找了一个月的工作,找到了一个小公司做了后端开发,当然使用go语言开发,带着兴奋劲,年轻身体也好,边努力学习,边工作。 时…

【Python编程】高性能Python Web服务部署架构解析

一、FastAPI 与 Uvicorn/Gunicorn 的协同 1. 开发环境:Uvicorn 直接驱动 作用:Uvicorn 作为 ASGI 服务器,原生支持 FastAPI 的异步特性,提供热重载(--reload)和高效异步请求处理。 启动命令: u…

Sentinel 笔记

Sentinel 笔记 1 介绍 Sentinel 是阿里开源的分布式系统流量防卫组件,专注于 流量控制、熔断降级、系统保护。 官网:https://sentinelguard.io/zh-cn/index.html wiki:https://github.com/alibaba/Sentinel/wiki 对比同类产品&#xff1…

JQuery 语法 $

jQuery 语法是通过选取 HTML 元素, 并对选取的元素执⾏某些操作 JQuery 选择器 jQuery 中所有选择器都以 $ 开头:$(). JQuery事件 事件由三部分组成: 1. 事件源: 哪个元素触发的 2. 事件类型: 是点击, 选中, 还是修改? 3. 事件处理程序: 进⼀步如何处理. …

算法每日一练 (9)

💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (9)最小路径和题目描述解题思路解题代码…

2025/3/8 第 27 场 蓝桥入门赛 题解

1. 38红包【算法赛】 签到题&#xff1a; 算倍数就行了 #include <bits/stdc.h> using namespace std; int main() {int ans0;for(int i1;i<2025;i){if(i % 3 0)ans;else if(i % 8 0)ans;else if(i % 38 0)ans;}cout<<ans<<endl;return 0; } 2. 祝福…

《白帽子讲 Web 安全》之深入同源策略(万字详解)

目录 引言 一、同源策略基础认知 &#xff08;一&#xff09;定义 &#xff08;二&#xff09;作用 &#xff08;三&#xff09;作用机制详解 二、同源策略的分类 &#xff08;一&#xff09;域名同源策略 &#xff08;二&#xff09;协议同源策略 &#xff08;三&…

基于SpringBoot的商城管理系统(源码+部署教程)

运行环境 数据库&#xff1a;MySql 编译器&#xff1a;Intellij IDEA 前端运行环境&#xff1a;node.js v12.13.0 JAVA版本&#xff1a;JDK 1.8 主要功能 基于Springboot的商城管理系统包含管理端和用户端两个部分&#xff0c;主要功能有&#xff1a; 管理端 首页商品列…

FFmpeg-chapter7和chapter8-使用 FFmpeg 解码视频(原理篇和实站篇)

解码流程如下图 流程&#xff1a;首先&#xff0c;通过 avcodec_alloc_context3(nullptr) 分配一个 AVCodecContext 结构体&#xff0c;然后使用 avcodec_parameters_to_context 将参数复制到上下文中&#xff0c;接着通过 avcodec_find_decoder 查找指定的解码器&#xff0c;并…

【银河麒麟高级服务器操作系统实例】虚拟机桥接网络问题分析及处理

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…

10 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar头像组件开发教程(一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 第一篇&#xff1a;Avatar 组件基础概念与设计1. 组件概述2. 接口设计2.1 形状类型定义2.2 尺寸类型定义2.3 组件属性接口 3. 设计原则4. 使用…

C++20 DR11:数组 `new` 可以推导出数组大小

文章目录 背景与动机C20 的改进示例代码编译器支持总结 在 C20 中&#xff0c;DR11 提案&#xff08;P1009R2&#xff09;引入了一项重要的语言特性改进&#xff1a;数组 new 表达式可以自动推导数组大小。这一改进极大地简化了动态数组的创建过程&#xff0c;使代码更加简洁易…