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

如何在el-tree懒加载并且包含下级的情况下进行数据回显-01

在项目中做需求,遇到一个比较棘手的问题,el-tree懒加载在包含下级的时候,需要做回显,将选中的数据再次勾选上,在处理这个需求的时候有两点是比较困难的:

  1. el-tree是懒加载的,包含下级需要一层一层展开,每次都会有一个请求,而我们的请求有时候很慢(每次resolve数据的时候都要请求一个数据),每次请求都会产生loading,loading过多加载时间过长,这个需要考虑。
  2. el-tree由于是懒加载而且是包含下级的,我们这边初次的方案是通过default-checked-keysdefault-expanded-keys属性进行回显,发现总是会多展开一层

这是模拟的数据

loadNode(node, resolve) {// orgPower是一个权限标识if (this.orgPower) {new Promise((_resolve) =>_resolve({ name: "总行", orgRefNo: "01" })).then((res) => {this.orgPower = false;return resolve([res]);});} else {new Promise((_resolve) =>_resolve(this.handleNodeData(node.data.orgRefNo))).then((res) => {return resolve(res);});}},handleNodeData(orgRefNo) {const data = [];for (let i = 0; i < new Array(5).length; i++) {data.push({name: `测试${orgRefNo}0${i + 1}`,orgRefNo: `${orgRefNo}0${i + 1}`,});}return data;},

el-tree的属性配置:

:props="{label:'name'}"
:load="loadNode"
highlight-current
lazy
show-checkbox
:current-node-key="currentNodeKey"
:default-expanded-keys="defaultExpandedKey"
:default-checked-keys="treeCheckKeyList"
node-key="orgRefno"// treeCheckKeyList => ['01', '0101', '0102', '0103', '0104', '0105']

这是产生出来的效果
在这里插入图片描述

比如说我们默认回显的是总行的值,但是因为是包含下级的,所以总行下一级的数据会全部会被回显。(treeCheckKeyList为 ['01', '0101', '0102', '0103', '0104', '0105'])这里我们做的是下一级的数据会被回显,不是下层好几级的数据都会回显,这是因为由于数据是懒加载的,下级,下下级,下下下级。。。的数据是未知的,所以只能做到其下一级。
这是我们的初始方案:

  1. 后端提供一个查询父级的接口,这个接口需要把选中数据的值传给后端,然后查询出来这些选中数据的父级,父父级,父父父级。。。直到找到最顶层级别,返回给前端。
// 这里模拟的选中的数据是总行及下一级,选中的数据对应的id是 ['01', '0101', '0102', '0103', '0104', '0105']
// '0101', '0102', '0103', '0104', '0105' 上级是总行(01),总行是最顶级,所以最终所有的上级是 01
// 同时后端还会把所有的选中的数据返回(这里会导致后面的问题),所以总共返回的是['01', '0101', '0102', '0103', '0104', '0105']
// 如果模拟选中的数据是测试0101(对应的id是0101),包含下级,总共选中的数据是 010101 010102 010103 010104 010105
// 返回的数据是 01(0101的上级) 0101(010101 010102 010103 010104 010105的上级) 010101 010102 010103 010104 010105
queryUpOrgList() {this.$apiHttp('queryUpOrgList', { listData: ['01', '0101', '0102', '0103', '0104', '0105']}).then(res => {// res.data 是['01', '0101', '0102', '0103', '0104', '0105']this.defaultExpandedKey = res.data})
},
  1. 把后端返回的数据,赋值defaultExpandedKey,把这些数据默认展开,即可自动勾选到下一级
    看一下最终的效果
    在这里插入图片描述
    问题是把第三层级的也选上了,主要原因是查询上级接口的返回数据把选中的数据也返回了
    那如果把给后端传递的数据过滤一下呢?是不是就可以了。
    不可以,过滤数据比较麻烦,不知道应该过滤哪些条数据。选中的数据分布可能比较混乱,分布在各个层级。
    而且,这种还是会请求很多次接口,
new Promise((_resolve) =>_resolve(this.handleNodeData(node.data.orgRefNo))).then((res) => {return resolve(res);
);

这里的接口会被调用多次。
后来,经过分析主要实现的难点在

  • 包含下级的时候,无法做到真正的最后一级不展开(比如这里指的是0101,0102,0103,0104,0105数据不展开,一旦展开就会自动默认把下级勾选上)
  • 数据加载过多的话,需要请求多次(有时候数据量很大,一次性勾选很多很多条数据,回显请求的接口过多,影响使用体验)

基于上面的难点和体验,又换了一套方案实现:就是不会主动去触发哪些节点展开,也就不会调用查询父级的接口queryUpOrgList,进而不会多次执行resolve,进行下级数据查询,而是给用户一个标识----对于全选,半选的数据,将全选,半选的标识再去默认赋上,这样让用户一层一层的去点击。
效果如下:
在这里插入图片描述
首次只加载初始化数据,全选,半选给出一个标识,让用户知道数据在哪些层级,手动去进行点击。因为此次数据主要是用作回显使用,所以我们需要给这样一个变量去处理回显数据

nodesMap: {"01": { checked: false, indeterminate: true, name: "总行" },"0101": { checked: false, indeterminate: true, name: "测试0101" },"0102": { checked: true, name: "测试0102" },"010101": { checked: true, indeterminate: true, name: "测试010101" },
},

indeterminate用作半选的回显,checked用作全选的回显。

相关文章:

如何在el-tree懒加载并且包含下级的情况下进行数据回显-01

在项目中做需求&#xff0c;遇到一个比较棘手的问题&#xff0c;el-tree懒加载在包含下级的时候&#xff0c;需要做回显&#xff0c;将选中的数据再次勾选上&#xff0c;在处理这个需求的时候有两点是比较困难的&#xff1a; el-tree是懒加载的&#xff0c;包含下级需要一层一…...

系列六、JVM的内存结构【栈】

一、产生背景 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的&#xff0c;不同平台的CPU架构不同&#xff0c;所以不能设计为基于寄存器的。 二、概述 栈也叫栈内存&#xff0c;主管Java程序的运行&#xff0c;是在线程创建时创建&#xff0c;线程销毁时销毁&…...

技巧篇:在Pycharm中配置集成Git

一、在Pycharm中配置集成Git 我们使用git需要先安装git工具&#xff0c;这里给出下载地址&#xff0c;下载后一路直接安装即可&#xff1a; https://git-for-windows.github.io/ 0. git中的一些常用词释义 Repository name&#xff1a; 仓库名称 Description(可选)&#xff1a;…...

Yolov5

Yolov5 Anchor &#xff11;&#xff0e;Anchor是啥&#xff1f; anchor字面意思是锚&#xff0c;是个把船固定的东东&#xff08;上图&#xff09;&#xff0c;anchor在计算机视觉中有锚点或锚框&#xff0c;目标检测中常出现的anchor box是锚框&#xff0c;表示固定的参考框…...

36、Flink 的 Formats 之Parquet 和 Orc Format

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

Docker 笔记(一)--安装

Docker 笔记&#xff08;一&#xff09;–安装 记录Docker 安装操作记录&#xff0c;便于查询。 参考 链接: Docker 入门到实战教程(二)安装Docker链接: docker入门(利用docker部署web应用)链接: 阿里云容器镜像服务/镜像加速器/操作文档链接: 网易镜像中心链接: 阿里云镜像…...

endnote20如何导入已经下载好的ris和pdf文件

查看此链接 1 文献导入 1.1 PDF导入 &#xff08;1&#xff09;方法一 打开&#xff1a;菜单栏–>Import–>FIle或folder 单个导入PDF或导入一个文件夹的PDF或通过拖曳多个PDF进入空白处完成导入 1.3 导入已经整理好的文献资料 已有的ris文件 打开&#xff1a;菜单栏–…...

x程无忧sign逆向分析

x程无忧sign逆向分析&#xff1a; 详情页sign&#xff1a; 详情页网站&#xff1a; import base64 # 解码 result base64.b64decode(aHR0cHM6Ly9qb2JzLjUxam9iLmNvbS9ndWFuZ3pob3UvMTUxODU1MTYyLmh0bWw/cz1zb3Vfc291X3NvdWxiJnQ9MF8wJnJlcT0zODQ4NGQxMzc2Zjc4MDY2M2Y1MGY2Y…...

Rust8.1 Smart Pointers

Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 15: Smart Pointers src/main.rs use crate::List::{Cons, Nil}; use std::ops::Deref…...

MATLAB与Excel的数据交互

准备阶段 clear all % 添加Excel函数 try Excel=actxGetRunningServer(Excel.Application); catch Excel=actxserver(Excel.application); end % 设置Excel可见 Excel.visible=1; 插入数据 % % 激活eSheet1 % eSheet1.Activate; % 或者 % Activate(eSheet1); % % 打开…...

使用.NET 4.0、3.5时,UnmanagedFunctionPointer导致堆栈溢出

本文介绍了使用.NET 4.0、3.5时&#xff0c;UnmanagedFunctionPointer导致堆栈溢出的处理方法&#xff0c;对大家解决问题具有一定的参考价值&#xff0c;需要的朋友们下面随着小编来一起学习吧&#xff01; 问题描述 我在带有try catch块的点击处理程序中有一个简单的函数。…...

jbase打印导出实现

上一篇实现了虚拟M层&#xff0c;这篇基于虚拟M实现打印导出。 首先对接打印层 using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml;namesp…...

特征缩放和转换以及自定义Transformers(Machine Learning 研习之九)

特征缩放和转换 您需要应用于数据的最重要的转换之一是功能扩展。除了少数例外&#xff0c;机器学习算法在输入数值属性具有非常不同的尺度时表现不佳。住房数据就是这种情况:房间总数约为6至39320间&#xff0c;而收入中位数仅为0至15间。如果没有任何缩放&#xff0c;大多数…...

前端算法面试之堆排序-每日一练

如果对前端八股文感兴趣&#xff0c;可以留意公重号&#xff1a;码农补给站&#xff0c;总有你要的干货。 今天分享一个非常热门的算法--堆排序。堆的运用非常的广泛&#xff0c;例如&#xff0c;Python中的heapq模块提供了堆排序算法&#xff0c;可以用于实现优先队列&#xf…...

C++之set/multise容器

C之set/multise容器 set基本概念 set构造和赋值 #include <iostream> #include<set> using namespace std;void PrintfSet(set<int>&s) {for(set<int>::iterator it s.begin();it ! s.end();it){cout<<*it<<" ";}cout&l…...

本地部署AutoGPT

我们都了解ChatGPT&#xff0c;是Openai退出的基于GPT模型的新一代 AI助手&#xff0c;可以帮助解决我们在多个领域的问题。但是你会发现&#xff0c;在某些问题上&#xff0c;ChatGPT 需要经过不断的调教与沟通&#xff0c;才能得到接近正确的答案。对于你不太了解的领域领域&…...

ProtocolBuffers(protobuf)详解

目录 前言特点语法定义关键字JSON与Protocol Buffers互相转换gRPC与Protocol Buffers的关系 前言 Protocol Buffers&#xff08;通常简称为protobuf&#xff09;是Google公司开发的一种数据描述语言&#xff0c;它能够将结构化数据序列化&#xff0c;可用于数据存储、通信协议…...

HTTP 到 HTTPS 再到 HSTS 的转变

近些年&#xff0c;随着域名劫持、信息泄漏等网络安全事件的频繁发生&#xff0c;网站安全也变得越来越重要&#xff0c;也促成了网络传输协议从 HTTP 到 HTTPS 再到 HSTS 的转变。 HTTP HTTP&#xff08;超文本传输协议&#xff09; 是一种用于分布式、协作式和超媒体信息系…...

清华学霸告诉你:如何自学人工智能?

清华大学作为中国顶尖的学府之一&#xff0c;培养了许多优秀的人才&#xff0c;其中不乏在人工智能领域有所成就的学霸。通过一位清华学霸的经验分享&#xff0c;揭示如何自学人工智能&#xff0c;帮助你在这场科技浪潮中勇往直前。 一、夯实基础知识 数学基础&#xff1a;学习…...

Ubuntu 安装VMware Tools选项显示灰色,如何安装VMware Tools

切换apt源为阿里云&#xff1a; https://qq742971636.blog.csdn.net/article/details/134291339 只要你的网络没问题&#xff0c;你直接执行这几个命令&#xff0c;重启ubuntu虚拟机即可、 sudo dpkg --configure -a sudo apt-get autoremove open-vm-tools sudo apt-get ins…...

CloudCompare进阶指南:PoissonRecon点云重建实战技巧

1. 点云重建入门&#xff1a;为什么选择PoissonRecon&#xff1f; 刚接触三维建模的朋友可能都有这样的困惑&#xff1a;扫描仪获取的原始点云数据看起来像一团散乱的星空&#xff0c;怎么才能变成光滑的曲面模型&#xff1f;这就是点云表面重建要解决的问题。在CloudCompare的…...

Linux实战——Finalshell高效连接与服务器管理

1. 为什么选择Finalshell管理Linux服务器 第一次接触Linux服务器管理时&#xff0c;我试过好几种连接工具。从最基础的Putty到Xshell&#xff0c;再到MobaXterm&#xff0c;最后发现Finalshell才是真正适合中国开发者的神器。它不仅免费&#xff0c;还集成了SSH连接、文件传输、…...

StructBERT中文相似度模型企业应用指南:对接CRM、知识库、智能客服系统的完整集成方案

StructBERT中文相似度模型企业应用指南&#xff1a;对接CRM、知识库、智能客服系统的完整集成方案 1. 企业级文本相似度应用概述 在当今企业数字化运营中&#xff0c;文本相似度计算技术正成为提升业务效率的关键工具。StructBERT中文相似度模型基于百度先进的大模型技术&…...

COLMAP点云处理完,用Brush做高斯泼溅前,这5个参数调优让你的3D模型质感飙升

COLMAP点云处理完&#xff0c;用Brush做高斯泼溅前&#xff0c;这5个参数调优让你的3D模型质感飙升 当你已经能够顺利跑通从COLMAP到Brush的完整流程&#xff0c;却发现生成的3D模型总是差那么点意思——要么细节模糊得像打了马赛克&#xff0c;要么表面噪点多得像撒了胡椒面&a…...

别再死记硬背了!用Multisim仿真带你玩转计数器与数据选择器(附FPGA引脚配置)

用Multisim仿真与FPGA实战&#xff1a;计数器与数据选择器的设计艺术 数字电路课程中那些抽象的概念&#xff0c;是否曾让你感到困惑&#xff1f;模5计数器、序列信号发生器这些名词听起来高深莫测&#xff0c;但通过Multisim仿真和FPGA实战&#xff0c;你会发现它们其实可以很…...

ROCm零基础入门实战指南:从环境搭建到高性能计算

ROCm零基础入门实战指南&#xff1a;从环境搭建到高性能计算 【免费下载链接】ROCm AMD ROCm™ Software - GitHub Home 项目地址: https://gitcode.com/GitHub_Trending/ro/ROCm AMD ROCm&#xff08;Radeon Open Compute&#xff09;是一套开源GPU计算平台&#xff0c…...

从LTE到5G-Advanced:载波聚合(CA)技术演进全解析与网络工程师调试指南

从LTE到5G-Advanced&#xff1a;载波聚合技术深度演进与实战调试手册 当你在凌晨三点的基站机房盯着屏幕上跳动的KPI指标&#xff0c;突然发现某个5G小区下行速率始终无法突破800Mbps——这很可能是一个典型的载波聚合配置问题。作为网络优化工程师&#xff0c;我们每天都在与这…...

LLaMA-Omni代码贡献指南:如何参与这个开源语音AI项目

LLaMA-Omni代码贡献指南&#xff1a;如何参与这个开源语音AI项目 【免费下载链接】LLaMA-Omni LLaMA-Omni is a low-latency and high-quality end-to-end speech interaction model built upon Llama-3.1-8B-Instruct, aiming to achieve speech capabilities at the GPT-4o l…...

从STM32开发手册中快速定位信息:文脉定序系统的嵌入式应用联想

从STM32开发手册中快速定位信息&#xff1a;文脉定序系统的嵌入式应用联想 作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我深知那种在动辄上千页的芯片手册里“大海捞针”的痛苦。比如&#xff0c;当你需要配置一个特定的定时器中断&#xff0c;或者想确认某个GPIO引…...

DeepSeek-OCR 技术解析:基于视觉压缩的端到端文档理解新范式

1. DeepSeek-OCR&#xff1a;重新定义文档理解的下一代技术 第一次接触DeepSeek-OCR时&#xff0c;我正被一个复杂的多栏报纸数字化项目困扰。传统OCR工具在处理这种复杂版面时&#xff0c;要么丢失栏目分隔信息&#xff0c;要么混淆文字顺序。直到尝试了DeepSeek-OCR的Gundam动…...