垂直行业门户网站建设方案/天津天狮网络营销课程
在前端开发中,树形结构和表格是常用的组件组合,尤其是在展示和管理复杂数据时。使用 Element UI 的 el-tree
和 el-table
组件,我们可以实现当表格中有选中行时,自动禁用树结构中的复选框,反之亦然。这不仅提升了用户体验,还能有效防止数据操作上的冲突。本文将详细介绍如何实现这一功能,并提供相应的代码示例。
实现思路
- 树结构 (
el-tree
):用于展示分层数据,支持复选框选择。 - 表格 (
el-table
):用于展示详细数据,支持多选行。 - 联动机制:
- 当表格中有选中行时,禁用树结构中的所有复选框。
- 当表格中没有选中行时,启用树结构中的复选框。
代码实现
以下是实现上述功能的关键代码片段。注意,代码部分保持原样,未作修改,仅在说明中进行了润色和解释。
树结构组件
<el-treeref="tree":data="treeData":props="defaultProps"node-key="id"show-checkbox:filter-node-method="filterNode"draggable:current-node-key="parentId"highlight-current:expand-on-click-node="false":auto-expand-parent="false":default-expanded-keys="twoKeys"@node-click="handleNodeClick"@node-expand="handleNodeExpand"@node-collapse="handleNodeCollapse"
/>
表格组件
<!-- 表格代码是封装之后,请注意你们的代码不能直接复制 -->
<common-table:dict="dict.type":columns="columns":dataSource="dataSource":ipagination="ipagination"@queryTable="loadData"@selection-change="handleSelectionChange"@sort-change="handleSortChange"
><template slot="left"><el-table-column type="selection" width="55" align="center" :selectable="selectable"/><el-table-column label="序号" align="center" width="60" type="index" :index="indexMethod"/></template>
</common-table>
Vue 数据与方法
data: function () {return {defaultProps: {children: "children",disabled: (data) => this.isNodeDisabled(data), // 动态禁用label: (data) => (data.label ? data.label : "") + " " + (data.materialCount ? data.materialCount : "")},multipleSelection: [] // 存储表格中选中的行}
},
methods: {
// 判断节点是否需要禁用
isNodeDisabled(data) {return this.multipleSelection.length > 0; // 如果表格有选中,则禁用树节点
},// 表格复选框是否禁用
selectable() {return this.$refs.tree.getCheckedNodes().length === 0;
},/** 列表多选 */
handleSelectionChange(selection) {this.multipleSelection = selection;// 创建新对象以触发响应式更新this.defaultProps = {...this.defaultProps, // 保留其余属性disabled: (data) => this.isNodeDisabled(data) // 动态赋值函数};// 如果树组件依然没有响应,可以使用 Vue 的 $forceUpdate() 强制整个组件重新渲染。// this.$forceUpdate(); // 强制更新视图
},
}
详细说明
1. 树结构 (el-tree
)
- 属性解释:
ref="tree"
:为树组件设置引用,方便在其他地方调用其方法。:data="treeData"
:绑定树的数据源。:props="defaultProps"
:配置树节点的属性,包括标签、子节点等。show-checkbox
:显示复选框。- 其他属性如
draggable
、highlight-current
等用于增强树的交互性。
2. 表格组件 (common-table
)
- 说明:此处使用了封装后的
common-table
组件,需根据实际情况进行调整,避免直接复制代码。 - 关键点:
@selection-change="handleSelectionChange"
:监听表格中选中行的变化,以便联动禁用树节点。
3. 数据与方法
-
defaultProps
:children
:定义子节点的属性名称。disabled
:动态设置节点是否禁用,依据isNodeDisabled
方法。label
:定义节点的显示标签,包含名称和物料数量。
-
isNodeDisabled
方法:- 判断表格中是否有选中行,如果有,则禁用树节点的复选框。
-
selectable
方法:- 判断树中是否有选中的节点,如果没有,则允许表格中的复选框可选。
-
handleSelectionChange
方法:- 更新
multipleSelection
数组,存储当前表格中选中的行。 - 重新赋值
defaultProps
,触发树组件的响应式更新,使复选框状态根据表格选择动态改变。 - 如果树组件未及时更新,可以使用
this.$forceUpdate()
强制重新渲染组件。
- 更新
使用效果
通过上述配置,当用户在表格中选中一行数据时,树结构中的所有复选框将被禁用,防止用户在树和表格之间同时进行选择操作。反之,当表格中没有选中行时,树结构的复选框将恢复可用状态,允许用户进行选择。
结语
通过这篇笔记,你应该已经了解了如何实现表格选中和树节点联动的功能。核心在于动态绑定 disabled 和 selectable 属性的逻辑,通过 Vue 的数据响应式机制,可以轻松实现像 el-tree
和 el-table
这样的复杂组件间的交互。
这种实现方式不仅适用于 el-tree
和 el-table
的联动,还可以拓展到其他需要组件联动的场景,为你的项目增添便利和灵活性!如果你还有其他类似需求,欢迎留言交流 😊
相关文章:

如何实现表格选中时禁用树结构的复选框功能(El-Tree 与 El-Table 联动实现)
在前端开发中,树形结构和表格是常用的组件组合,尤其是在展示和管理复杂数据时。使用 Element UI 的 el-tree 和 el-table 组件,我们可以实现当表格中有选中行时,自动禁用树结构中的复选框,反之亦然。这不仅提升了用户体…...

STM32CUBEIDE FreeRTOS操作教程(十):interrupt on/off中断开关
STM32CUBEIDE FreeRTOS操作教程(十):interrupt on/off中断开关 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件,不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发…...

Linux的基本操作及虚拟机设置
文章目录 Linux的目录结构Linux中的常见目录 VI和VIM编辑器什么是VI和VIM编辑器VIM的一般模式VIM的编辑模式VIM的命令模式模式间的切换 虚拟机网络配置查看网络信息修改网络配置信息查看和修改主机名服务管理类命令 虚拟机管理操作VMware为虚拟机拍摄快照VMware为虚拟机执行克隆…...

oracle 用户手册
Oracle用户手册 一、Oracle数据库概述 定义与用途 Oracle数据库是一款功能强大的关系型数据库管理系统(RDBMS)。它用于存储和管理大量的结构化数据,广泛应用于企业级应用、金融系统、电商平台等各种需要高效数据处理和存储的场景。例如,银行使用Oracle数据库来存储客户账户…...

Flutter-Web打包后上线白屏
问题描述 Flutter上线后进行测试发现界面白屏,打开开发者模式查看网络发现加载main.js文件404 问题原因 我上线的地址是https://xxx:8091/homedots,但是我打包后的index文件中的baseUrl是"/",将地址改成”/homedots/",注意homedots后面…...

解决linux访问huggingface的问题(操作记录)
目录 一、clash软件(linux)的下载 二、clash软件(linux)的使用 三、linux命令行访问huggingface 1、问题分析 2、设置命令行代理 四、补充(windows的linux虚拟机) 五、参考链接 一、clash软件&#…...

Android Studio 右侧Gradle窗口只有test的task问题解决
目录 运行环境问题现象解决方案1、打开Settings设置界面2、设置选项3、重启Android Studio4、重新Sync工程 运行环境 Android Studio Giraffe | 2022.3.1 Patch 3 Android SDK 33 Gradle 8.0.1 JDK 17 问题现象 Android Studio右侧Gradle窗口下只有test的task,其他…...

Spring AOP 的实现和切点表达式的介绍
1. 快速入手 AOP:就是面相切面编程,切面指的就是某一类特定的问题,也可以理解为面相特定方法编程,例如之前使用的拦截器,就是 AOP 思想的一种应用,统一数据返回格式和统一异常处理也是 AOP 思想的实现方式…...

【赛博保安】安全日记之常用术语(一)
"企业的信息安全治理水平,直接取决于安全团队人员的技术专业度,而非运营经验值。所谓的技术,并非指渗透和挖洞的能力,而是指软件开发、IT 架构、网络拓扑相关的知识和经验。 站在乙方的角度来看,技术薄弱的安全人…...

C++ 中的 string 类:全面解析与应用实践(上)
🤖🌟 欢迎降临张有志的未来科技实验室🤖🌟 专栏:C 👨💻👩💻 先赞后看,已成习惯👨💻👩💻…...

量化交易系统开发-实时行情自动化交易-8.7.文华平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于文华平台介绍。 文华财经…...

美畅物联丨如何通过 FFmpeg 解码视频
FFmpeg是一款功能强大、在多媒体处理领域广泛应用的开源工具。它可以处理多种音频和视频格式,包含编码、解码、转码、流媒体处理等众多功能。前两天,我们在《美畅物联丨如何通过FFmpeg排查视频问题》一文中介绍了借助FFmpeg程序来辅助判断视频播放异常的…...

机器学习任务功略
loss如果大,训练资料没有学好,此时有两个可能: 1.model bias太过简单(找不到loss低的function)。 解决办法:增加输入的feacture,设一个更大的model,也可以用deep learning增加弹性…...

Web Worker 和 WebSocket的区别
Web Worker(消息传递机制) 定义:是为了在浏览器中提供多线程支持,允许 JavaScript 在后台线程运行,而不阻塞主线程。它非常适合执行耗时的计算任务或处理大量数据,避免主线程(通常是 UI 线程&a…...

JMeter实时性能压测可视化系统整合
一、相关工具简介: JMeter、Grafana 和 InfluxDB 结合实时地收集、分析和展示性能测试数据,进行更好地理解系统的性能表现,及时发现潜在问题并进行优化。 1,JMeter 实时生成性能数据,并将其发送到 InfluxDB 进行存储。2,InfluxDB 存储的数据。3,通过Grafana的仪表板,用…...

无限加载和懒加载及路由滚动及路由滚动不生效
这里写目录标题 列表无限加载懒加载定制路由滚动使用scrollBehavior不起效不管用的原因使用scrollTo来实现路由滚动elMain && elMain.scrollTo(...) 的作用是: 无限加载和懒加载的区别 列表无限加载 无限加载功能在现代网页和移动应用中广泛应用࿰…...

CSS底层基础:小白速来
1. CSS简介 CSS (Cascading Style Sheets) 是一种用来描述HTML或XML文档样式的语言。它使得开发者能够控制网页的布局和外观,包括字体、颜色、间距等。CSS通过选择器来指定要应用样式的元素,并定义这些元素的具体样式属性。 基本结构示例: …...

【MySQL 进阶之路】索引概述
第06章_索引 1.什么是索引 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查…...

【C++boost::asio网络编程】有关异步读写api的笔记
异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类,主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…...

Elasticsearch 的存储与查询
Elasticsearch 的存储与查询 在搜索系统领域,数据的存储与查询是两个最基础且至关重要的环节。Elasticsearch(ES) 在这两方面进行了深度优化,使其在关系型数据库或非关系型数据库中脱颖而出,成为搜索系统的首选。 映射 (Mapping) 映射 (Ma…...

008静态路由-特定主机路由
按照如上配置,用192.168.0.1 电脑ping 192.168.1.1 发现能够ping通 用192.168.0.1 电脑ping 192.168.2.1 发现不能ping通 这是因为192.168.0.1 和 192.168.1.1 使用的是同一个路由器R1。 192.168.0.1 和 192.168.2.1 通信需要先经过R1,再经过R2 …...

SystemUI 下拉框 Build 版本信息去掉
需求及场景 去掉SystemUI 下拉框 Build 版本信息 如下图所示:去掉 12 (SP1A.201812.016) 了解 去掉之前我们先了解它是个什么东西:其实就是一个Build RTM 信息显示 Android_12_build_SP1A.210812.016 修改文件 /frameworks/base/packages/Syste…...

【JS】栈内存、堆内存、事件机制区别、深拷贝、浅拷贝
js中,内存主要分为两种类型:栈内存(stack)、堆内存(heap),两种内存区域在存储和管理数据时有各自的特点和用途。 栈内存 访问顺序 栈是先进后出、后进先出的数据结构,栈内存是内存用…...

如何确保Java爬虫获得1688商品详情数据的准确性
在数字化商业时代,数据的价值日益凸显,尤其是对于电商平台而言。1688作为中国领先的B2B电子商务平台,提供了海量的商品数据接口,这些数据对于市场分析、库存管理、价格策略制定等商业活动至关重要。本文将详细介绍如何使用Java编写…...

【蓝牙通讯】iOS蓝牙开发基础介绍
1. iOS 蓝牙开发基础 在 iOS 中,蓝牙的操作主要是通过 Core Bluetooth 框架来实现。理解 Core Bluetooth 的基本组件和工作原理是学习 iOS 蓝牙开发的第一步。 核心知识点: Core Bluetooth 框架:这是 iOS 系统提供的专门用于蓝牙低功耗&am…...

Vue 90 ,Element 13 ,Vue + Element UI 中 el-switch 使用小细节解析,避免入坑(获取后端的数据类型自动转变)
目录 前言 在开发过程中,我们经常遇到一些看似简单的问题,但有时正是这些细节问题让我们头疼不已。今天,我就来和大家分享一个我在开发过程中遇到的 el-switch 使用的小坑,希望大家在使用时能够避免。 一. 问题背景 二. 问题分…...

echarts的双X轴,父级居中的相关配置
前言:折腾了一个星期,在最后一天中午,都快要放弃了,后来坚持下来,才有下面结果。 这个效果就相当是复合表头,第一行是子级,第二行是父级。 子级是奇数个时,父级label居中很简单&…...

RuoYi-Vue部署到Linux服务器(Jar+Nginx)
一、本地环境准备 源码下载、本地Jdk及Node.js环境安装,参考以下文章。 附:RuoYi-Vue下载与运行 二、服务器环境准备 1.安装Jdk 附:JDK8下载安装与配置环境变量(linux) 2.安装MySQL 附:MySQL8免安装版下载安装与配置(linux) 3.安装Redis 附:Redis下载安装与配置(…...

Linux firewalld常用命令
启动防火墙 systemctl start firewalld 停止防火墙 systemctl stop firewalld 防火墙开机自启动 systemctl enable firewalld 禁止防火墙开机自启动 systemctl disable firewalld 检查防火墙的状态 systemctl status firewalld 重新加载防火墙的配置 firewall-cmd -…...

Vue 组件之间的通信方式
Vue.js 中组件之间的通信是构建复杂应用的关键部分。以下是一些常见的Vue组件通信方式: 1. Props 和 Emit(父子组件通信) Props:父组件通过props向子组件传递数据。Emit:子组件通过emit触发事件,向父组件…...