热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

eltree刷新后保持展开状态和选中节点不变

需求el-tree刷新后默认折叠全部节点,默认选中第一个节点(以下简称默认设置)。现在需求是:新增或编辑节点数据,要求刷新后保持展开状态和选中节点不变。思路思路一:只在第一次进入

需求

el-tree 刷新后默认折叠全部节点,默认选中第一个节点(以下简称 默认设置)。

现在需求是:新增或编辑节点数据,要求刷新后保持展开状态和选中节点不变。


思路

  1. 思路一:只在第一次进入页面时的刷新,采用 默认设置,其他时候的刷新,不改变展开和选中节点;

  2. 思路二: 刷新都采用 默认设置,其他时候的刷新,看之前有没有选中和展开的节点,若有则保持它们不变,否则采用 默认设置


分析

思路一:第一次进入页面时 不容易判断;

思路二:看之前有没有选中和展开的节点,需要把数据保存起来。


情况一:仅在新增或修改节点数据时,要求刷新后状态不变。那么就不需要用到本地存储 LocalStorage 或者 COOKIEs;

情况二:若要求任何时候的刷新,只要之前有展开节点或选中节点,刷新后状态都不变,那么就要用到本地存储。


在这里适用于情况一


解决办法

第一步:刷新后节点的展开状态不变

el-tree 中有两个方法:


image


image

其中的 expandedList 可以在 data 中声明为空数组,如果需要接收祖先组件 prop 传值,也可以设置在计算属性中。

image

// methods 中
/* 节点展开触发 */
handleNodeExpand(data, node) {
// 保存当前展开的节点
let flag = false
this.expandedList.some(ele => {
if(ele === data[this.nodeKey]) {
// 判断当前节点是否存在,存在则不做处理
flag = true
return true
}
})
if (!flag) {
// 不存在则存到数组中
this.expandedList.push(data[this.nodeKey])
}
},
/* 节点缩起触发 */
handleNodeCollapse(data, node) {
console.log('节点缩起触发:', {data}, {node})
// 删除当前缩起的节点及其子节点
this.expandedList.some((ele, index) => {
if (ele === data[this.nodeKey]) {
// 数组扁平化 this.extractTree() 为封装的公共方法
const flatChildren = this.extractTree(data, 'children')
flatChildren.forEach(ele => {
const index = this.expandedList.indexOf(ele)
if (index !== -1) {
this.expandedList.splice(index, 1)
}
})
}
})
}


注意:参考链接 保留展开状态:element el-tree树结构刷新后保留展开状态解决方法 中,点击父节点需要点两次才能折叠。原因是:删除当前关闭的节点时,父节点虽然删掉了,但其后代节点还没来得及删,因此第一次点击折叠无效。

// 树节点关闭
handleNodeCollapse(data) {
// 删除当前关闭的节点
this.defaultExpandIds.some((item, i) => {
if (item === data.id) {
this.defaultExpandIds.splice(i, 1)
}
})
this.removeChildrenIds(data) // 这里主要针对多级树状结构,当关闭父节点时,递归删除父节点下的所有子节点
},
// 删除树子节点
removeChildrenIds(data) {
const ts = this
if (data.children) {
data.children.forEach(function(item) {
const index = ts.defaultExpandIds.indexOf(item.id)
if (index > 0) {
ts.defaultExpandIds.splice(index, 1)
}
ts.removeChildrenIds(item)
})
}
},
————————————————
版权声明:本文为CSDN博主「苜可」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43555948/article/details/119642353

第二步:刷新后选中的节点不变

image


参考链接

  1. 保留展开状态:element el-tree树结构刷新后保留展开状态解决方法



  2. 本地存储:vue项目中使用element UI中的el-tree刷新后保持节点展开状态





推荐阅读
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • 本文详细介绍了如何创建和使用VUE uni-app开发环境,包括通过HBuilderX可视化界面和通过vue-cli命令执行的方法。文章内容简单清晰,易于学习与理解。通过学习本文,读者可以深入了解VUE uni-app开发环境,并通过实践验证掌握具体的使用情况。编程笔记将为读者推送更多相关知识点的文章,欢迎关注! ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
author-avatar
dhailing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有