vue 目录树的展开与关闭
目录
- 1、翻页方法中控制目录树节点的展开与关闭
- 2、搜索目录树节点名称控制节点的展开与关闭
<el-tree:data="data_option"ref="tree":props="defaultProps"@node-click="handleNodeClick":default-expanded-keys="needExpandedKeys"node-key="type_id"highlight-current>
</el-tree>expandedKeys: [], //所有treenode的id
needExpandedKeys: [], //需要展开的treenode的id数组
needExpandedNodes:[],//需要展开的treenode的node数组
关键在于以下两行代码
:default-expanded-keys="needExpandedKeys" // needExpandedKeys数组,用来保存展开节点的唯一值node-key="type_id" //每个节点的唯一值,这里我的唯一值是type_id
data_option 数组如果没有这个唯一值怎么办,给它加一个
//list 是目录树节点以及目录树节点下的文件所组成的一个数组
this.data_option = this.addTypeIdToTreeNode(list); addTypeIdToTreeNode(lastList) {//传进去的list是有tree又有file//给每个node节点添加type_id,用来展开目录设置唯一值let treeData = lastList;const addIdToTree = (treeData) => {return treeData.map((node, index) => {if (!node._id) { //根据自己目录树数组的实际情况修改,因为我这个_id有用所以需要判断const newNode = {...node,type_id: node.type_code == 0 ? "wfl000" : node.type_code,}; // 创建一个新的节点,包括原有的属性和新的 _id 属性if (node.childrens && node.childrens.length > 0) {newNode.childrens = addIdToTree(node.childrens); // 递归处理子节点}return newNode;} else {const newNode = { ...node, type_id: node._id }; // 创建一个新的节点,包括原有的属性和新的 _id 属性return newNode;}});};const treeDataWithId = addIdToTree(treeData);let str = [];const getStr = function (list) {list.forEach(function (row) {if (row.childrens) {str.push(row.type_id);getStr(row.childrens);} else {str.push(row.type_id);}});};getStr(treeDataWithId);this.expandedKeys = str;// console.log("需要展开的treenode", this.expandedKeys);// console.log("需要展开的treeDataWithId", treeDataWithId);return treeDataWithId;},
1、翻页方法中控制目录树节点的展开与关闭
this.$nextTick(() => {this.$refs.tree.setCurrentKey(this.userArr[0].type_id //高亮当前节点,type_id 唯一值确定节点);//展开高亮文件的目录this.expandedKeys.forEach((node) => {if (//this.indexLocation 翻页之后是a文件,a文件的下标this.userArr[this.indexLocation].type_id.indexOf(node) !== -1 ) {this.needExpandedKeys.push(node);}});this.needExpandedKeys.forEach((node) => {this.$refs.tree.store.setCheckedNodes([node], true);});});
2、搜索目录树节点名称控制节点的展开与关闭
//搜索goToSearch(){let treedata = this.data_optionif(this.searchStr){//需要关闭所有节点 //除了上次搜索展开的节点还有自己点击展开的节点this.changeTreeNodeStatus(this.$refs.tree.store.root)this.needExpandedNodes = []this.needExpandedKeys = []//获取需要展开的节点数组this.findTypeCode(treedata, this.searchStr)this.needExpandedNodes.forEach(item=>{this.needExpandedKeys.push(item.type_id)})if(this.needExpandedKeys.length == 0){this.$message.error("没有找到您搜索的目录节点")}else{//模拟点击该节点,使其高亮,默认高亮搜索出的第一个节点this.handleNodeClick(this.needExpandedNodes[0],this.$refs.tree.getNode(this.needExpandedKeys[0]))}console.log("needExpandedKeys",this.needExpandedKeys)}else{this.changeTreeNodeStatus(this.$refs.tree.store.root)this.needExpandedNodes = []this.needExpandedKeys = []}},//循环拿到需要展开的目录子节点findTypeCode(treeData, targetName) {// 遍历树结构for (let i = 0; i < treeData.length; i++) {const node = treeData[i];// 如果节点的 type_name 包含目标名称,返回该节点的 type_codeif (node.type_name.includes(targetName)) {// if (node.type_name==targetName) {console.log(node.type_id)if(node.type_id){this.needExpandedNodes.push(node)}}// 如果节点有子节点,递归调用自身进行深度优先搜索if (node.childrens && node.childrens.length > 0) {const result = this.findTypeCode(node.childrens, targetName);// 如果在子树中找到了匹配的节点,返回结果if (result) {return result;}}}// 如果没有找到匹配的节点,返回 null 或者适合您的默认值return null;},changeTreeNodeStatus(node) {node.expanded = falsefor (let i = 0; i < node.childNodes.length; i++) {// 改变节点的自身expanded状态node.childNodes[i].expanded = this.defaultExpand// 遍历子节点if (node.childNodes[i].childNodes.length > 0) {this.changeTreeNodeStatus(node.childNodes[i])}}},
记录一个比较重要的点:高亮某行目录树节点
this.handleNodeClick(this.needExpandedNodes[0],this.$refs.tree.getNode(this.needExpandedKeys[0]))//即:
this.handleNodeClick(node, this.$refs.tree.getNode(node))
//node为 目录树的一个节点,在我这儿比如data_option数组中的某个对象
相关文章:
vue 目录树的展开与关闭
目录 1、翻页方法中控制目录树节点的展开与关闭2、搜索目录树节点名称控制节点的展开与关闭 <el-tree:data"data_option"ref"tree":props"defaultProps"node-click"handleNodeClick":default-expanded-keys"needExpandedKeys&…...
【Docker】python flask 项目如何打包成 Docker images镜像 上传至阿里云ACR私有(共有)镜像仓库 集成Drone CI
一、Python环境编译 1、处理好venv环境 要生成正常的 requirements.txt 文件,我们就需要先将虚拟环境处理好 创建虚拟环境(可选): 在项目目录中,你可以选择使用虚拟环境,这样你的项目依赖将被隔离在一个…...
力扣labuladong——一刷day55
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣951. 翻转等价二叉树二、力扣124. 二叉树中的最大路径和三、力扣112. 路径总和(遍历)四、力扣112. 路径总和(分解&a…...
springboot实现验证码功能
转载自 : www.javaman.cn 1、编写工具类生成4位随机数 该工具类主要生成从0-9,a-z,A-Z范围内产生的4位随机数 /*** 产生4位随机字符串*/public static String getCheckCode() {String base "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn…...
内测分发平台是否支持应用的微服务化部署
内测分发平台的微服务化部署支持是现代应用开发和部署的一个重要特性。首先我们得知道什么是微服务化部署都有哪些关键功能,如何实施微服务化的部署。下文以我自己理解总结了几点。 图片来源:news.gulufenfa.com 微服务是一种基于独立运行的小型服务来构建应用程序…...
1140. 最短网络,prim算法,模板题
1140. 最短网络 - AcWing题库 农夫约翰被选为他们镇的镇长! 他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。 约翰的农场的编号是1…...
升级jdk17过程中,原来的jdk8下的webservice客户端怎样处理
背景:之前jdk8环境下,使用的cxf框架,而且是动态加载解析作为客户端。大家一直相处的很愉快。但是最近升级jdk17,发现cxf不好用了。网上百度,大部分都是说升级cxf版本,并且添加jaxb的相关依赖就可以了。但是…...
Verilog基本语法概述
一、概述 Verilog 是一种用于数字逻辑电路设计的硬件描述语言,可以用来进行数字电路的仿真验证、时序分析、逻辑综合。 既是一种 行为级(可用于电路的功能描述) 描述语言又是一种 结构性(可用于元器件及其之间的连接)…...
论文阅读:C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range SLAM
前言 论文全程为C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range Simultaneous Localization and Mapping,是发表在MDPI drones(二区,IF4.8)上的一篇论文。这篇文章使用单目相机、惯性测量单元( IMU )和UWB设备作为…...
蓝桥杯刷题day01——字符串中的单词反转
题目描述 你在与一位习惯从右往左阅读的朋友发消息,他发出的文字顺序都与正常相反但单词内容正确,为了和他顺利交流你决定写一个转换程序,把他所发的消息 message 转换为正常语序。 注意:输入字符串 message 中可能会存在前导空…...
Python---引用变量与可变、非可变类型
引用变量 在大多数编程语言中,值的传递通常可以分为两种形式“ 值 传递 与 引用 传递”,但是在Python中变量的传递基本上都是引用传递。 变量在内存底层的存储形式 a 10 第一步:首先在计算机内存中创建一个数值10(占用一块…...
GDOUCTF2023-Reverse WP
文章目录 [GDOUCTF 2023]Check_Your_Luck[GDOUCTF 2023]Tea[GDOUCTF 2023]easy_pyc[GDOUCTF 2023]doublegame[GDOUCTF 2023]L!s![GDOUCTF 2023]润!附 [GDOUCTF 2023]Check_Your_Luck 根据 if 使用z3约束求解器。 EXP: from z3 i…...
Day43力扣打卡
打卡记录 子数组的最小值之和(乘法原理 单调栈) 大佬的题解 class Solution:def sumSubarrayMins(self, arr: List[int]) -> int:n len(arr)# 左边界 left[i] 为左侧严格小于 arr[i] 的最近元素位置(不存在时为 -1)left, s…...
elementui的table合并列,三个一组
<el-table :span-method"objectSpanMethod" :cell-style"iCellStyle" :data"tableData" height"63vh" border style"width: 100%; margin-top: 6px"><el-table-column type"index" label"序号"…...
HarmonyOS-Service服务开发(一)
文章目录 创建新项目启动Serviceets获取service的bundleName DataAbility开发指导开发Data步骤创建Data 创建新项目 ServiceAbility开发指导 在config.json中也有配置出现 启动Service ets获取service的bundleName 项目的bundleName service的bundleName 这里serviceAbil…...
FLASK博客系列4——再谈路由
最近好像拖更有点久了。抱歉抱歉~ 今天我们继续来聊聊路由(其实就是我上次偷懒剩下一点没讲完)。 通过上次的文章,我们基本了解了Flask中的路由,是不是比较简单呢?别急,今天来点猛料。 一、路由之HTTP方法绑…...
sql之left join、right join、inner join的区别
sql之left join、right join、inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下࿱…...
京东秒杀之秒杀详情
1 编写前端页面(商品详情) <!DOCTYPE html> <head><title>商品详情</title><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><script type"text/javascript" src&…...
mobaxterm 下载、安装、使用
下载 官网 MobaXterm free Xserver and tabbed SSH client for Windows 下载页面 MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download 点击下载 安装 双击安装 勾选协议 修改安装路径 ,等待安装完成 使用 启动 新建连接 输入主机用户名和密…...
办公技巧:Word中插入图片、形状、文本框排版技巧
目录 一、插入图片排版技巧 二、添加形状排版技巧 三、插入“文本框”排版技巧 我们平常在制作word时候经常会遇到插入选项卡下的图片、形状和文本框这三种情况下,那么如何使得Word文档当中添加这三个元素的同时,又能保证样式美观呢,今天小…...
Vue-Awesome:10分钟快速掌握Vue.js最佳SVG图标组件
Vue-Awesome:10分钟快速掌握Vue.js最佳SVG图标组件 【免费下载链接】vue-awesome Awesome SVG icon component for Vue.js, built-in with Font Awesome icons. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-awesome Vue-Awesome是Vue.js生态中最受欢迎…...
Ubuntu动态库路径管理全攻略:从LD_LIBRARY_PATH到ldconfig实战
1. 动态库路径管理基础 当你第一次在Ubuntu上运行程序时,看到"error while loading shared libraries"这样的报错,是不是感觉一头雾水?这其实是Linux系统在告诉你:"我找不到程序需要的动态库文件啦!&q…...
如何进行高效的抗体工程改造?
一、抗体工程改造为何是现代生物医药研发的关键技术?抗体工程改造是通过分子生物学和基因工程技术对抗体进行定向改良的系统性技术。这项技术能够突破天然抗体的功能局限,创造具有优化特性的新型抗体分子。在现代生物医药研发中,抗体工程改造…...
手把手教程:用Ollama部署Yi-Coder-1.5B,小白也能玩转代码生成
手把手教程:用Ollama部署Yi-Coder-1.5B,小白也能玩转代码生成 1. 引言 你是否曾经遇到过这样的场景:面对一个编程问题,明明知道大概思路,却卡在具体实现上?或者需要快速生成某个功能的代码框架࿰…...
AI Agent Harness Engineering 的架构演进之路
AI Agent Harness Engineering 的架构演进之路 1. 标题 (Title) AI Agent Harness Engineering 的5代架构演进:从“单Agent试错”到“百万级Agent联邦协同” 从LangChain到自建百万级集群:AI Agent工程化(Harness)的全景架构史与未来 AI Agent的“操作系统”之路:Harness …...
深入浅出Oracle RAC:gc buffer busy acquire等待事件的原理与优化策略
深入浅出Oracle RAC:gc buffer busy acquire等待事件的原理与优化策略 在Oracle RAC环境中,gc buffer busy acquire等待事件是影响性能的关键因素之一。这种等待事件通常发生在多个会话同时请求访问同一数据块时,特别是在跨实例访问的场景下。…...
Qwen3.5-2B效果展示:对模糊车牌图的字符识别+车辆类型+颜色判断
Qwen3.5-2B效果展示:对模糊车牌图的字符识别车辆类型颜色判断 1. 模型简介 Qwen3.5-2B是一款轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。该模型主打低功耗、低门槛部署,特别适配端侧和边缘设备&a…...
BMS软件架构实战 — 高压互锁(HVIL)诊断策略与安全设计
1. 高压互锁(HVIL)的核心价值与安全逻辑 高压互锁就像新能源汽车高压系统的"安全哨兵"。想象一下,当你家里要使用大功率电器时,总会先检查插座和电线是否完好——HVIL就是为整车高压系统做类似的检查。这个看似简单的低…...
PR合并策略深度剖析:Merge、Squash与Rebase的选择与实战
PR合并策略深度剖析:Merge、Squash与Rebase的选择与实战 昨天review代码时又遇到个头疼事:某功能分支在合并到main后,提交历史里突然冒出来几十个“fix typo”“update config”这类琐碎commit。回溯功能演进过程时,得在碎石子般的提交记录里跳来跳去,关键修改被埋没在噪…...
gInk:Windows上最实用的免费屏幕标注工具完全指南
gInk:Windows上最实用的免费屏幕标注工具完全指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否曾在演示时需要快速圈出重点,或在线会议…...
