vue3:树的默认勾选和全选、取消全选

实现的功能,上面有个选择框,当选中全部时,下方树被全选

代码:
<template><div><el-select v-model="selectAll" style="margin-bottom: 10px;" @change="handleSelectAllChange"><el-option value="all" label="全部">全部</el-option><el-option value="one" label="取消">取消</el-option></el-select><el-tree ref="treeRef" class="filter-tree" :data="treeData" :props="defaultProps" node-key=id highlight-current:current-node-key="leafNode.id" @node-click="treeNodeClick" default-expand-all show-checkbox @check="check":default-checked-keys="checKay" /><!-- 设置 check-strictly="true" 表明你希望节点之间的选择状态是独立的,用户可以单独选择每个节点而不影响其他节点的选中状态。这与全选或取消其下一级层级的功能是相符合的,因为这意味着用户可以选择父节点而不会影响其子节点的选中状态。--></div></template><script setup>
import { ref } from "@vue/reactivity";
import { nextTick, watch } from "@vue/runtime-core";
import { ElTree } from "element-plus";
const { proxy } = getCurrentInstance();
const emit = defineEmits(["treeNodeClick"]);const treeData = ref([{children: [{ id: "1", label: "朝阳区", nodeType: 2 }],id: "2", label: "北京市", nodeType: 1
},
{children: [{children: [{ id: "3", label: "高新区", nodeType: 3 },{ id: "5", label: "历下区", nodeType: 3 }],id: "4", label: "济南市", nodeType: 2}],id: "6", label: "山东省", nodeType: 1
},
{children: [{children: [{ id: "7", label: "长安区", nodeType: 3 }],id: "8", label: "石家庄", nodeType: 2}],id: "9", label: "河北省", nodeType: 1
},
{children: [{children: [{ id: "10", label: "中原区", nodeType: 3 }],id: "11", label: "郑州", nodeType: 2},{children: [{ id: "12", label: "老城区", nodeType: 3 }],id: "13", label: "洛阳", nodeType: 2}],id: "14", label: "河南省", nodeType: 1
},
])const treeRef = ref(null);
const selectAll = ref(""); // 使用字符串类型的变量表示选择全部的状态
const defaultProps = {children: 'children',label: 'label',
};
const checKay = ref([])const leafNode = ref({});
const check = (node, checked) => {if (checked) {// 选中节点console.log(node, checked);leafNode.value = node;} else {// 取消选中节点if (node.id === leafNode.value.id) {leafNode.value = {};}}
};
const treeNodeClick = (node) => {emit("treeNodeClick", node);
};
const handleSelectAllChange = (value) => {if (value == "all") {checKay.value = getAllIds(treeData.value)} else {// 如果取消选择全部,则遍历树节点并取消选中所有节点checKay.value = []nextTick(() => {treeRef.value.setCheckedKeys([]);});}
};
// 递归函数,获取所有节点的 id
const getAllIds = (nodes) => {let ids = [];nodes.forEach((node) => {ids.push(node.id);if (node.children) {ids = [...ids, ...getAllIds(node.children)];}});return ids;
};// 递归函数,取消选中所有节点
const deselectAllNodes = (nodes) => {nodes.forEach((node) => {node.checkedKeys = [];if (node.children) {deselectAllNodes(node.children);}});
};
</script>
<style scoped>
.filter-tree {/* margin-top: 10px; */
}
</style>
实现效果:

具体代码剖析:
 A、html部分
 <el-tree ref="treeRef" 
class="filter-tree" 
:data="treeData" 
:props="defaultProps"node-key=id highlight-current:current-node-key="leafNode.id"@node-click="treeNodeClick" 
default-expand-all 
show-checkbox@check="check":default-checked-keys="checKay" />

1、ref="treeRef":给 <el-tree> 组件设置一个引用名,可以在 JavaScript 中通过这个引用名来操作该组件。

2、:data="treeData":将 treeData 绑定到 <el-tree> 的 data 属性上,这个属性是树形结构的数据源,用于渲染树节点。

3、:props="defaultProps":将 defaultProps 绑定到 <el-tree> 的 props 属性上,这个属性用于指定树节点的一些属性配置,比如子节点的键名和显示内容的键名。

4、node-key="id":指定树节点数据中用作节点唯一标识的字段名。

5、highlight-current:当节点被选中时,高亮显示该节点。

6、:current-node-key="leafNode.id":设置当前被选中的节点的 key,通常用于在树中显示当前选中的节点。

7、@node-click="treeNodeClick":当点击树节点时触发 treeNodeClick 方法。

8、default-expand-all:默认展开所有的树节点。

9、show-checkbox:显示复选框,允许用户通过复选框选择树节点。

10、@check="check":当复选框状态发生变化时触发 check 方法。

11、:default-checked-keys="checKay":将 checKay 绑定到 <el-tree> 的 default-checked-keys 属性上,用于设置默认选中的节点的 key。

B、js部分

通过官网告诉我们的方法,我们点击节点,打印我们可以发现,选中的时候是放到这个数组里面的

const check = (node, checked) => {if (checked) {// 选中节点console.log(node, checked);leafNode.value = node;} else {// 取消选中节点if (node.id === leafNode.value.id) {leafNode.value = {};}}
};

我们知道default-checked-keys是树结构默认勾选的数组

const checKay = ref([])这个是我定义的默认勾选的数组

当我的选择框为全部 的时候,我只需要把树结构default-checked-keys存放的为全部数据的id即可

const handleSelectAllChange = (value) => {if (value == "all") {checKay.value = getAllIds(treeData.value)} else {// 如果取消选择全部,则遍历树节点并取消选中所有节点checKay.value = []nextTick(() => {treeRef.value.setCheckedKeys([]);});}
};
// 递归函数,获取所有节点的 id
const getAllIds = (nodes) => {let ids = [];nodes.forEach((node) => {ids.push(node.id);if (node.children) {ids = [...ids, ...getAllIds(node.children)];}});r

当不为全部的时候,树全部不选,其实就是将这个数组给清空   就行了

checKay.value = []

我直接写,发现,树并没有取消勾选,

这时候需要首先清空 checKay.value,然后使用 nextTick 方法等待下一个 DOM 更新周期,并在其中调用 treeRef.value.setCheckedKeys([]) 来清空树节点的选中状态

checKay.value = []nextTick(() => {treeRef.value.setCheckedKeys([]);});

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

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

相关文章

electron打包dist为可执行程序后记【electron-quick-start】

文章目录 目录 文章目录 前言 一、直接看效果 二、实现步骤 1.准备dist文件夹 2.NVM管理node版本 3.准备electron容器并npm run start 4.封装成可执行程序 1.手动下载electron对应版本的zip文件&#xff0c;解决打包缓慢问题 2.安装packager 3.配置打包命令执行内容…

嵌入式linux中利用QT控制蜂鸣器方法

大家好,今天给大家分享一下,如何控制开发板上的蜂鸣器。 第一:开发板原理图 从原理图中可以得出,当引脚输出低电平的时候,对应的蜂鸣器发出响声。 第二:QT代码详细实现 设置一个按钮,点击即可控制BEEP状态发生反转。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#in…

华为鸿蒙生态,威力估计被很多人低估了……

华为鸿蒙生态&#xff0c;威力估计被很多人低估了&#xff01;华为的鸿蒙千帆计划快成了&#xff0c;微信的加盟让计划就基本没问题了。 最近华为公布原生鸿蒙APP进度&#xff0c;在TOP5000应用里面&#xff0c;已经有4000支持了&#xff0c;不是已经开发完成&#xff0c;就是…

Electron+Vue3整合 - 开发时状态整合

说明 本文介绍一下 Electron Vue3 的整合的基本操作。实现的效果是 &#xff1a; 1、一个正常的Vue3项目&#xff1b; 2、整合加入 Electron 框架 &#xff1a;开发时 Electron 加载的是开发的vue项目&#xff1b;步骤一&#xff1a;创建vue3项目 常规操作&#xff0c;不再赘…

(C语言)fscanf与fprintf函数详解

目录 1 fprintf详解 1.1 向文件流中输入数据 1.2 向标准输入流写数据 2. fscanf函数详解 2.1 从文件中读取格式化数据 2.2 从标准输入流中读取格式化数据 1 fprintf详解 头文件&#xff1a;stdio.h 该函数和printf的参数特别像&#xff0c;只是多了一个参数stream&#…

删除word中下划线的内容

当试卷的题目直接含答案&#xff0c;不利用我们刷题。这时如果能够把下划线的内容删掉&#xff0c;那么将有利于我们复习。 删除下划线内容的具体做法&#xff1a; ①按ctrl H ②点格式下面的字体 ③选择下划线线型中的_____ ④勾选使用通配符并在查找内容中输入"?&qu…

增强现实(AR)开发框架

增强现实&#xff08;AR&#xff09;开发框架为开发者提供了构建AR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统和网络功能。以下是一些流行的AR开发框架。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

【C语言】贪吃蛇项目(2)- 实现代码详解

文章目录 前言一、游戏开始界面设计首先 - 打印环境界面其次 - 游戏地图、蛇身及食物的设计1、地图2、蛇身设置及打印3、食物 二、游戏运行环节蛇的上下左右移动等功能蛇的移动 三、结束游戏代码 前言 在笔者的前一篇博客中详细记载了贪吃蛇项目所需的一些必备知识以及我们进行…

MySQL面试题 3

问题1&#xff1a;char、varchar的区别是什么&#xff1f; varchar是变长而char的长度是固定的。如果你的内容是固定大小的&#xff0c;你会得到更好的性能。 问题2: TRUNCATE和DELETE的区别是什么&#xff1f; DELETE命令从一个表中删除某一行&#xff0c;或多行&#xff0…

上位机图像处理和嵌入式模块部署(树莓派4b实现动态插件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和上位机一样&#xff0c;我们的智能硬件如果想应用到更多的场景&#xff0c;那么势必需要实现更多的算法。这些算法和算法之间最好是松散耦合的插…

存储过程的使用(二)

目录 带 OUT 参数的存储过程 输入一个编号&#xff0c;查询数据表 emp中是否有这个编号&#xff0c;如果有返回对应员工姓名&#xff0c;如果没有&#xff0c;则提示没有对应员工 使用 EXEC 命令或者 PRINT执行含有 OUT参数的存储过程 使用 PL/SQL 块编辑程序调用含有 OUT …

智慧公厕是如何诞生的?

在城市化进程中&#xff0c;公共卫生设施的建设一直是重要议题之一。而随着科技的不断发展&#xff0c;智慧公厕作为一种创新的解决方案&#xff0c;逐渐成为了现代城市管理的亮点。那么&#xff0c;智慧公厕是如何产生的呢&#xff1f; 一、城市化进程的推动 城市人口的增加和…

排序 “壹” 之插入排序

目录 ​编辑 一、排序的概念 1、排序&#xff1a; 2、稳定性&#xff1a; 3、内部排序&#xff1a; 4、外部排序&#xff1a; 二、排序的运用 三、插入排序算法实现 3.1 基本思想 3.2 直接插入排序 3.2.1 排序过程&#xff1a; 3.2.2 代码示例&#xff1a; 3.2.3…

基于通达信---做T专用算法

什么是做T? 股票做T是股票市场中常见的一种投资策略,也就是股票进行T+0操作,通过当天买进的股票,在当天卖出,是股市中常见的一种超短线的操作。其中T就是指交易日,利用交易日中的股票涨跌来赚取差价。股票做T常见的类型就是正T和倒T。 1、正T 股票做正t就是指先买后卖,…

【Java框架】Spring框架(一)——Spring基本核心(IOC/DI)

目录 Java企业级框架企业级系统EJB概念解析EJB与Spring的恩怨情仇 Spring系统架构1. Data Access/Integration&#xff08;数据访问&#xff0f;集成&#xff09;2. Web 模块3. Core Container&#xff08;Spring 的核心容器&#xff09;4. AOP、Aspects、Instrumentation 和 M…

javaWeb项目-智能仓储系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JSP技术 JSP(Jav…

一文讲透彻Redis 持久化

文章目录 ⛄1.RDB持久化&#x1fa82;&#x1fa82;1.1.执行时机&#x1fa82;&#x1fa82;1.2.RDB原理&#x1fa82;&#x1fa82;1.3.小结 ⛄2.AOF持久化&#x1fa82;&#x1fa82;2.1.AOF原理&#x1fa82;&#x1fa82;2.2.AOF配置&#x1fa82;&#x1fa82;2.3.AOF文件…

浅谈 刷算法题时遇到运行超时异常 的解决办法

文章目录 一、背景介绍二、解决办法2.1 C/C 语言2.2 Java 语言2.2.1 ACM模式下 Java的I/O原理 三、模板详情 一、背景介绍 最近在牛客、leetcode 刷算法题时发现一个奇怪的问题&#xff0c;明明解题思路、所用算法与题解一致&#xff0c;并且在本地IDE运行是通过的&#xff0c…

【C语言__结构体__复习篇5】

目录 前言 一、结构体基础知识 1.1 结构体的语法形式 1.2 创建结构体变量 1.3 结构体变量的初始化 1.4 点(.)操作符和箭头(->)操作符 二、匿名结构体 三、结构体自引用 四、结构体内存对齐 4.1 内存对齐的规则 4.2 出现结构体内存对齐的原因 4.3 修改默认对齐数 五、结…

Flutter 热修复(Shorebird)

Shorebird&#xff1a;https://docs.shorebird.dev/ 我们都知道安卓原生开发&#xff0c;热修复已经不是什么难题。阿里云&#xff0c;腾讯云已经都有现成的SDK可以接入。 然而Flutter开发还一直没有类似热修复的开发库&#xff0c;无意中看到了Shorebird这个平台&#xff0c…