el-tree检查当前节点是否是传入节点的父级或祖先节点

 实现的效果就是:树形结构选中一个目录后点击收起的时候需要知道当前收起的是不是选中目录的父节点或者是祖先节点
这就用到了递归,什么是递归呢?简单来说递归就是方法自己调用自己,每次调用时传入不同的变量。一直到程序执行到指定的出口时停止调用本身,并将结果层层返回。

不多说,请看代码

<template><el-tree ref="treeRef" :data="data" @node-click="handleNodeClick"></el-tree> 
</template>
<script>
export default {setup() {const state = reactive({selectedId: '',data: [], selectData:[]})const handleNodeClick = (data, node) => {if (!data.children) {state.selectedId = data.id;state.selectData = data;} else {if (state.selectedId && node.expanded) {treeRef.value.setCurrentKey(state.selectedId);} else if (state.selectedId && !node.expanded) {console.log("收起----",state.selectData);const isParent = isParent(state.selectData, data);if (!isParent) {// console.log("当前节点不是他的父级或祖先");treeRef.value.setCurrentKey(state.selectedId);} else {// console.log("当前节点是他的父级或祖先");}}}};//检查当前节点是否是传入节点的父级或祖先节点const isParent = (node, potential) => {if (!node || !potential) return false;// 如果相同为同级目录,不是父节点或祖先节点if (node.parentId === potential.parentId) return false;// 如果当前节点的父节点等于待检查节点则为父节点let nodeParentId = treeRef.value.getNode(node.id)?.parent.data.id;if (nodeParentId === potential.id) return true;// 递归检查父节点return isParentOrAncestor(treeRef.value.getNode(node.id)?.parent.data,potential);};return {handleNodeClick,isParent}}
}
</script>

数据的大致结构

{

children: [{id: 111, parentId: 1, name: "目录a",},{id: 222, parentId: 1, name: "目录b",}…]

id: 1

name:目录s
},

{

children: [{id: 333, parentId: 2, name: "目录c",},{id: 444, parentId: 2, name: "目录d",}…]

id: 2

name:目录n
}

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

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

相关文章

spring的bean定义和扫描规则

1、bean的基本定义 在Spring框架中&#xff0c;Bean是一个核心概念&#xff0c;它是Spring IoC&#xff08;Inverse of Control&#xff0c;控制反转&#xff09;容器管理的一个对象实例。简单来说&#xff0c;Bean就是由Spring容器初始化、配置和管理的对象。这些对象可以是J…

算法06 贪心算法【C++实现】

我们可以扮演一个贪心的人&#xff0c;在金子、银、铁中选择装入背包带走的话&#xff0c;作为一个贪心的人&#xff0c;肯定要把价值最大化&#xff0c;优先要选择装载价值较高的金子。 目录 什么是贪心算法 证明方法 常见题型 常见题型解法 训练&#xff1a;小木船过河 …

WARP 加速您的 AI 数据存储基础设施

你知道一些最好的人工智能模型的秘诀吗&#xff1f;这是他们可以访问的数据量&#xff0c;他们可以接受培训。对于 AI/ML 模型&#xff1a;快速访问数据为王。让我强调一下&#xff0c;这不仅仅是数据&#xff0c;而是快速访问的数据。如果有人可以构建更快、更强大的模型&…

骚操作:如何让一个网页一直处于空白情况?

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 如题&#xff0c;惯性思路很简单&#xff0c;就是直接撸上一个空内容的html。 注&#xff1a;以下都是在现代浏览器中执行&#xff0c;主要为**Chrome 版本 120.0.6099.217&…

在 The Sandbox 体验韩剧《碰撞搜查线》的刺激!

风靡全球的韩国电视剧《碰撞搜查线》现已登陆 The Sandbox 元宇宙&#xff01; ASTORY 的电视剧《碰撞搜查线》以充满动作喜剧色彩的方式&#xff0c;讲述了一个交通犯罪调查小组打击公路上的恶棍的故事。该剧迅速成为 Disney 最受欢迎的节目之一&#xff01; 在 The Sandbox体…

「动态规划」如何求最长递增子序列的长度?

300. 最长递增子序列https://leetcode.cn/problems/longest-increasing-subsequence/description/ 给你一个整数数组nums&#xff0c;找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其…

CAN通讯相关知识拆解报文格式过滤器数据交互

在嵌入式系统中使用CAN&#xff08;Controller Area Network&#xff09;通讯&#xff0c;需要掌握以下内容&#xff1a; CAN协议&#xff1a;了解CAN总线通讯的基本原理&#xff0c;包括帧格式、报文结构、消息ID等内容。CAN控制器&#xff1a;理解CAN控制器的工作原理以及如…

如何在Java中实现资源池管理?

如何在Java中实现资源池管理&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入讨论在Java中如何实现资源池管理的技术细节和最佳实践。…

java连接mysql报错

1.背景&#xff0c;直接升级操作系统从centos-》国产化操作系统&#xff0c;mysql也升级到5.7.44 2&#xff0c;报错 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconn…

品牌策划背后的秘密:我为何对此工作情有独钟?

你是否曾有过一个梦想&#xff0c;一份热爱&#xff0c;让你毫不犹豫地投身于一个行业&#xff1f; 我就是这样一个对品牌策划充满热情的人。 从选择职业到现在&#xff0c;我一直在广告行业里“混迹”&#xff0c;一路走来&#xff0c;也见证了许多对品牌策划一知半解的求职…

适用于Mac的免费外置硬盘数据恢复软件

“我有一个 1 TB 的外置硬盘&#xff0c;它被意外格式化了。我尝试从中恢复丢失的数据。我把它连接到我的Mac&#xff0c;但里面什么也没找到。我正在寻找适用于Mac的免费外置硬盘数据恢复软件&#xff0c;例如奇客数据恢复Mac版或其他Mac数据恢复免费软件来扫描它并恢复数据。…

人工ai智能写作,分享推荐三款好用软件!

在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;而在内容创作领域&#xff0c;AI智能写作软件更是如雨后春笋般涌现。今天&#xff0c;就为大家分享三款备受好评的AI智能写作软件&#xff0c;让你轻松掌握高效写作的秘密…

企业级-PDF水印签字

作者&#xff1a;fyupeng 技术专栏&#xff1a;☞ https://github.com/fyupeng 项目地址&#xff1a;☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 一、介绍 根据关键字偏移量水印签字。 允许重复调用&#xff0c;文件安全性高&#xff0c;自动备份并…

win10系统管理员账号怎么切换

1、按住“windowsx”&#xff0c;选择“计算机管理” 2、在页面左侧&#xff0c;找到“计算机管理(本地)”&#xff0c;展开“系统工具”&#xff0c;点击“本地用户和组”下面的“用户”&#xff0c;在右侧找到“Administrator”&#xff0c;双击打开。 3、在打开页面选择常规…

Docker(六)-本地镜像发布到私有库

1.下载镜像Docker Registry 用于搭建私人版本Docker Hub docker pull registry2.运行私有库Registry 运行私有库Registry&#xff0c;相当于本地有个私有Docker hubdocker run -d -p hostPort:containerPort -v 【宿主机目录】:【容器目录】 --privilegedtrue 【私有库镜像】…

泛微E9开发 根据判断条件,控制字段的编辑/必填属性

根据判断条件&#xff0c;控制字段的编辑/必填属性 1、需求说明2、实现方法3、扩展知识点1. 注册钩子事件&#xff0c;指定动作完成后触发1.1 接口名称及参数说明1.2 案例 2. 改变单个字段显示属性(只读/必填等)2.1 参数说明2.2 案例 1、需求说明 当字段“填报人”和字段“姓名…

android-aidl4

转&#xff1a;Android Aidl的使用_android aidl使用-CSDN博客 一.准备 Parcelable&#xff0c;可以理解成只是把car整个对象在aidl中进行传递&#xff0c;就理解成一个car的一个类吧&#xff0c;和其他类使用一样就行了&#xff0c;回调&#xff1a;把接口作为参数放在函数参…

Spring Boot集成Redisson

文章目录 Spring Boot集成Redisson1. Redisson概述2. Redission作用3. 集成Redission前提&#xff1a;步骤 1: 添加依赖步骤 2: 配置Redisson 4. 结论 Spring Boot集成Redisson 1. Redisson概述 Redisson是一个在Redis基础上实现的Java驻内存数据网格&#xff08;In-Memory D…

从广州到上海|荣载光的智慧 与SSHT共同探索智能照明更多想象空间

随着生活水平的提高&#xff0c;大众对高品质生活的追求脚步逐步加快&#xff0c;人们对智能照明的需求日益多样化&#xff0c;不再仅仅满足于传统的照明功能&#xff0c;而是转向智能照明系统&#xff0c;提出更高的需求。 展望未来&#xff0c;中国智能照明市场预计将迎来全…

文旅景区科技馆增加5D影院项目VR游乐场

王屋山风景名胜区增加20座5D影院设备&#xff0c;5D影院不像普通电影院&#xff0c;5D影院座椅可以根据影片播放内容&#xff0c;进行实时摆动和各种特效&#xff0c;闪电&#xff0c;振臀振臂&#xff0c;泡泡等个种特效。影片内容可以进行定制&#xff0c;根据景区文化风光&a…