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

Vue2 element cascader级联选择器懒加载编辑时回显数据

Vue2 element cascader级联选择器懒加载编辑时回显数据

element cascader组件渲染大量数据时会造成页面渲染卡顿,给用户造成不好的体验,因此在这种情况下都会采用懒加载方式展示数据,但是会造成一个问题,就是编辑表单时由于cascader数据还没有加载,那么已选择的数据无法回显,下面是解决方案(递归元素click事件触发cascader-lazyLoad事件),我这里是有三个动态表单,级联时五层数据结构,回显200+条数据时虽然还有点稍微卡顿,但我这边一般选不到这么多数据,只是为了测试,但已经比一开始直接渲染时好很多,如果是回显数据少的情况下和正常效果一样

在这里插入图片描述

  mounted() {// 一定要缓存一份选择的回显数据,不然html click时会清空已选择的数据,导致子级无法递归this.tempTagValues = JSON.parse(JSON.stringify(this.itemValue.tagConditions));// 500毫秒后再渲染标签,防止多个组件渲染卡顿setTimeout(() => {this.isTag = true;}, this.tagTime);}

el-cascader组件配置,通过popper-class加随机数设置唯一className防止动态表单存在相同组件,通过默认slot配置级联html元素下面方法递归需要通过html click事件,isTag是动态表单时添加的一个定时渲染,每500毫秒渲染一个el-cascader组件,可以更好的提升渲染效果

// 标签懒加载方法
const handleTagChildren = (paths, options) => {const code = paths.shift();const tagItem = options.find((item) => item.code === code);if (paths.length) {return handleTagChildren(paths, tagItem.children);}return (tagItem.children || []).map((item) => {return {...item,children: []};});
};
// el-cascader组件懒加载触发初始时,调用级联子级html click
hanldeLazyLoad(node, resolve) {if (node.level === 0) {const list = this.tagOptions.map((item) => {return {...item,children: []};});resolve(list);// 加载完第一级联时递归加载已选择级联this.$nextTick(() => {this.handleTagClick(this.tempTagValues);// 隐藏级联选择层setTimeout(() => {this.$refs.tagCascader.dropDownVisible = false;}, 0);});} else {// 这里按照你的数据格式做懒加载处理resolve(handleTagChildren([...node.path], this.tagOptions));}}
handleTagClick(data) {if (!data.length) {return 0;}const paths = data.shift();const handle = (index) => {this.$nextTick(() => {// 获取级联节点,从第一级开始const tagEls = document.querySelectorAll(`.event-rule-tag-${this.brandSeriesKey} .tag-item-${index}`);tagEls.forEach((el) => {// 获取级联节点中的codeconst code = el.dataset.code;if (paths[index] === code) {if (paths.length - 1 === index) {// 如果是最后一级节点则check点击el.parentNode.previousElementSibling.click();} else {// code相等则级联节点点击el.parentNode.parentNode.click();if (data.length) {this.handleTagClick(data);}}handle(index + 1);}});});};handle(0);}
http://www.dtcms.com/a/298792.html

相关文章:

  • 【VLAs篇】06:从动作词元化视角谈VLA模型的综述
  • 异常(全)
  • which soffice soffice not found
  • Wordpress主题配置
  • 2025年7月24日·AI今日头条
  • KNN算法:从原理到实战全解析
  • Execel文档批量替换标签实现方案
  • day33:零基础学嵌入式之网络——TCP并发服务器
  • 基于javaweb的医院挂号系统
  • 动态规划解析:以最小花费爬楼梯为例
  • 纸板留声机:用ESP32和NFC打造会唱歌的复古装置
  • SeaweedFS深度解析(四):裸金属单机部署之配置文件启动master服务
  • IMU的精度对无人机姿态控制意味着什么?
  • [特殊字符] 第9篇:《SQL高阶 SELECT 技巧:DISTINCT、ORDER BY、LIMIT 全家桶》
  • ComfyUI中运行Wan 2.1工作流,电影级视频,兼容Mac, Windows
  • java微操
  • NLP验证自动化脚本优化
  • 硬核接线图+配置步骤:远程IO模块接入PLC全流程详解
  • 前端开发 Vue 状态优化
  • 多场景通用车辆计数算法助力暑期交通管理
  • Java从入门到精通!第十四天,重点!(反射)
  • 20250725-day22
  • Ivanti Endpoint Manager Mobile 远程命令执行漏洞复现(CVE-2025-4427)
  • 壁纸管理 API 文档
  • 测试实时性内核参数配置
  • 如何阅读字节码文件
  • Arrays 工具类详解
  • 在线事务型的业务、实时分析类业务、离线处理类型的业务
  • C语言————原码 补码 反码 (超绝详细解释)
  • 【循环语句,求100内能被6整除的和】