vue2:树形控件el-tree中加载两种不同结构的数据

需求

需要在树形控件中逐级显示公司、部门以及不同部门下的项目信息。其中,公司及部门信息的结构是一致的,但是项目是另一种结构(类)。所以,树结构中需要用到两种不同结构的数据。

El-tree

主要属性

下面是一个el-tree控件,包含了其中主要的属性

<el-tree:data="projectOptions"     //树形图所绑定的数据:props="defaultTreeProps"  //配置选项,共四项,见下文:expand-on-click-node="false":filter-node-method="filterNode":default-expanded-keys="defaultShowNodes" //树形控件展开节点,是一个数组,从根节点到叶子节点:current-node-key="currentNodeKey":load="loadTreeNode"      //lazy模式下,点击节点前的小三角时触发,加载该节点数据数据ref="tree"lazy                         //懒加载,即点击节点前的小三角时才开始加载(获取)数据:highlight-current="true"@node-click="handleNodeClick"    //点击节点所要处理的业务逻辑style="max-height:calc(100vh - 180px); overflow:auto;"/>

配置选项props

defaultTreeProps: {children: 'children',label: 'deptName',                  isLeaf: 'leaf'
},

Label

节点标签,即每个节点所显示的字符,可以直接指定一个字符串,表示节点对象的某个属性值,比如上面例子中'deptName'表示结果数据中的deptName字段(部门名称)作为树形控件的label。

但是,因为我的树形图最后的叶子节点是项目,里面是没有deptName字段的,我希望叶子节点显示项目名称,所以,我就需要用一个方法来动态控制label的值:在前面的节点使用deptName,最后的叶子节点使用projectName,如下,我是通过返回的数据中是否有deptName这个字段来判断的:

 label: function(data,node){if(data.deptName) return data.deptNameelse return data.projectName;
},

 isLeaf

lazy模式下,用于指定节点是否为叶子节点。

lazy模式下,在点击节点时才进行该层数据的获取,默认情况下 Tree 无法预知某个节点是否为叶子节点,所以会为每个节点添加一个下拉按钮,如果节点没有下层数据,则点击后下拉按钮会消失。但是,如果你获取数据时就知道这个节点是否是叶子节点,也可以提前告知 Tree ,从而避免在叶子节点前渲染不必要的下拉按钮。比如最开始的示例中,isLeaf: 'leaf'表示使用节点对象中的leaf属性来告知Tree是否是叶子节点(在部门实体类中有这么个数据项)。

但是,我要在最后一级部门节点下要加载项目信息,所以,不可以用部门对象中的leaf属性,这会导致在最后一级部门节点处没有小三角,无法点击,也就无法触发该节点的:load方法来加载项目数据。所以,我同样需要动态判定是否是leaf:这里我检查,如果数据中有projectName这个字段,也就是项目信息,它就是叶子节点,否则,非叶子节点。这里根据实际业务来选择判定方法。

isLeaf: function(data){if(data.projectName) return true;else return false;
}

小结

综上,prop中的选项,即可以直接指定使用节点对象中的某个属性来赋值,也可以使用一个函数来动态计算。函数中有data和node两个默认入参(具体可参考官网中el-tree页面关于prop的表格:Element - The world's most popular Vue UI framework)。

(初始化)数据加载 on load

根据实际业务需求,逐层加载数据,比如下面的代码,第一层加载公司信息,第二层和第三层分别加载部门数据,最后一层加载项目数据。

async loadTreeNode(node, resolve) {if (node.level === 0) {await this.getTreeRoot(node, resolve);}else if(node.level === 1 || node.level === 2){await this.getDeptList(node, resolve);}else{await this.getProjectList(node, resolve);}
},

下面是获取部门信息的示例,将返回值中的数据信息提取出来,赋给resolve返回。

getDeptList(node, resolve) {listDept({parentId: node.data.deptId}).then(res => {const {data} = res;    //提取res中的data部分resolve(data);});}
},

在JavaScript中,resolve是一个Promise对象的方法,用于返回一个已解析(resolved)的Promise对象。

Promise是一种用于处理异步操作的对象,它可以将异步操作封装为一个Promise对象,然后通过resolve方法将Promise对象状态设置为已解析(resolved),表示异步操作已成功完成。

resolve方法接受一个参数,该参数可以是任意类型的值,通常是一个表示异步操作的结果。当调用resolve方法时,Promise对象的状态将从pending变为fulfilled,然后通过.then方法执行与该Promise对象相关的成功回调函数。

需要注意的是,Promise对象的状态一旦被解析或拒绝(rejected)后,就不能再次改变。所以,在调用resolve方法后,Promise对象的状态将保持为已解析状态,而不能再变为未解析状态。

响应节点点击事件on node-click

这里可以定义当鼠标点击树形图中的某个节点时需要给出什么响应,共有三个参数:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。

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

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

相关文章

浅谈Spring Cloud:认识微服务

SpringCloud就是分布式微服务架构的一站式解决方案&#xff0c;是微服务架构落地的多种技术的集合。 目录 微服务远程调用 Eureka注册中心 搭建Eureka Server 注册组件 服务拉取 当各种各样的服务越来越多&#xff0c;拆分的也越来越细&#xff0c;此时就会出现一个服务集…

计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

MySQL高阶1919-兴趣相同的朋友

题目 请写一段SQL查询获取到兴趣相同的朋友。用户 x 和 用户 y 是兴趣相同的朋友&#xff0c;需满足下述条件&#xff1a; 用户 x 和 y 是朋友&#xff0c;并且用户 x and y 在同一天内听过相同的歌曲&#xff0c;且数量大于等于三首. 结果表 无需排序 。注意&#xff1a;返…

常见排序(C语言版)

1.排序的概念及其应用 1.1排序的概念 排序&#xff1a;​ 在计算机科学与数学中&#xff0c;一个排序算法&#xff08;英语&#xff1a;Sorting algorithm&#xff09;是一种能将一串资料依照特定排序方式排列的算法。 稳定性&#xff1a;假定在待排序的记录序列中&#xff…

聚观早报 | 小米三折叠手机专利曝光;李斌谈合肥投资蔚来

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 9月20日消息 小米三折叠手机专利曝光 李斌谈合肥投资蔚来 索尼PS5 Pro包装亮相 新一代Spectacles AR眼镜发布 通…

《AI系统:原理与架构》于华为HC大会2024正式发布

2024年9月21日&#xff0c;《AI系统&#xff1a;原理与架构》新书发布会在上海世博馆华为HC大会顺利举办。本书由华为昇腾技术专家、B站AI科普博主ZOMI酱和哈工大软件学院副院长苏统华教授联合编写&#xff0c;是领域内AI系统方面填补空白的重磅之作。 发布会上&#xff0c;《A…

Spring:项目中的统一异常处理和自定义异常

介绍异常的处理方式。在项目中&#xff0c;都会进行自定义异常&#xff0c;并且都是需要配合统一结果返回进行使用。 1.背景引入 &#xff08;1&#xff09;背景介绍 为什么要处理异常&#xff1f;如果不处理项目中的异常信息&#xff0c;前端访问我们后端就是显示访问失败的…

JavaScript发送邮件:实现前端触发的教程?

JavaScript发送邮件的方式&#xff1f;怎么使用JavaScript发信&#xff1f; 无论是用户反馈、联系表单还是自动通知&#xff0c;前端触发的邮件发送功能都能极大地提升用户体验。AokSend将详细介绍如何通过JavaScript发送邮件&#xff0c;实现前端触发的邮件发送功能。 JavaS…

跨站请求伪造(CSRF)漏洞详解

免责申明 本文仅是用于学习检测自己搭建的DVWA靶场环境有关CSRF的原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法…

ubuntu24安装vivado24(安装并解决若干错误)

目录 安装方法&#xff1a;问题1&#xff1a;解决办法&#xff1a; 问题2&#xff1a;解决方法&#xff1a; 安装完成&#xff1a; 安装方法&#xff1a; 注意&#xff1a;内存最好预留80G空闲的。 安装好大小&#xff1a; 安装依赖库&#xff1a; sudo apt-get update sud…

计算机网络17——IM聊天系统——客户端核心处理类框架搭建

目的 拆开客户端和服务端&#xff0c;使用Qt实现客户端&#xff0c;VS实现服务端 Qt创建项目 Qt文件类型 .pro文件&#xff1a;配置文件&#xff0c;决定了哪些文件参与编译&#xff0c;怎样参与编译 .h .cpp .ui&#xff1a;画图文件 Qt编码方式 Qt使用utf-8作为编码方…

鸿蒙 WebView 如何 Debug

前置&#xff1a; hdc chrome //----------------------------------------------------------------------------------------------- hdc shell cat /proc/net/unix | grep devtools 0: 00000002 0 10000 1 1 81134005 webview_devtools_remote_62479exit执行&…

vulnhub(12):bob 1.0.1(gpg文件解密)

端口 nmap主机发现 nmap -sn 192.168.72.0/24 ​ Nmap scan report for 192.168.72.169 Host is up (0.00020s latency). ​ 169是新出现的机器&#xff0c;他就是靶机 nmap端口扫描 nmap -Pn -sV 192.168.72.169 -p- --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nmap…

STL简介

在了解了C中的类和对象以及内存管理基本的知识后接下来我们将进入STL的学习&#xff0c;在此我们在本篇会先了解STL的由来以及大致了解STL的组成&#xff0c;接下来在之后的篇章中我将依次来学string、vector等&#xff0c;学习完STL之后相信你会进一步了解C的魅力所在。接下来…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0917)

七、引入 element-ui 组件库 我的Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 官方文档&#xff1a; https://element-plus.org/zh-CN/ 安装 $ pnpm add element-plus自动按需&#xff1a; 安装插件 pnpm add -D unplugin-vue-components unplugin-auto…

机器翻译之Bahdanau注意力机制在Seq2Seq中的应用

目录 1.创建 添加了Bahdanau的decoder 2. 训练 3.定义评估函数BLEU 4.预测 5.知识点个人理解 1.创建 添加了Bahdanau的decoder import torch from torch import nn import dltools#定义注意力解码器基类 class AttentionDecoder(dltools.Decoder): #继承dltools.Decoder写…

元学习的简单示例

代码功能 模型结构&#xff1a;SimpleModel是一个简单的两层全连接神经网络。 元学习过程&#xff1a;在maml_train函数中&#xff0c;每个任务由支持集和查询集组成。模型先在支持集上进行训练&#xff0c;然后在查询集上进行评估&#xff0c;更新元模型参数。 任务生成&…

3DMAX乐高积木插件LegoBlocks使用方法

3DMAX乐高积木插件LegoBlocks&#xff0c;用户可以通过控件调整和自定义每个乐高积木的外观和大小。 【适用版本】 3dMax2009或更高版本&#xff08;不仅限于此范围&#xff09; 【安装方法】 3DMAX乐高积木插件无需安装&#xff0c;使用时直接拖动插件脚本文件到3dMax视口中…

NLP 主要语言模型分类

文章目录 ngram自回归语言模型TransformerGPTBERT&#xff08;2018年提出&#xff09;基于 Transformer 架构的预训练模型特点应用基于 transformer&#xff08;2017年提出&#xff0c;attention is all you need&#xff09;堆叠层数与原transformer 的差异bert transformer 层…

Packet Tracer - 配置编号的标准 IPv4 ACL(两篇)

Packet Tracer - 配置编号的标准 IPv4 ACL(第一篇) 目标 第 1 部分&#xff1a;计划 ACL 实施 第 2 部分&#xff1a;配置、应用和验证标准 ACL 背景/场景 标准访问控制列表 (ACL) 为路由器 配置脚本&#xff0c;基于源地址控制路由器 是允许还是拒绝数据包。本练习的主要内…