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

2022-10-19实例代码
210

element el-tree树结构刷新后保留展开状态解决方法
我们在使用element的el-tree组件的时候,当我们给树结构重新赋值后,树节点就全部自动合上了。所以我们要记录展开状态,方法如下
html代码如下:
<el-tree
  ref="tree"
  :data="treeList"
  :highlight-current="true"
  :default-expanded-keys="defaultExpandIds" //这个属性就是记录展开状态的
  :filter-node-method="filterNode"
  node-key="id" //这个属性不能漏掉
  :indent="30"
  :accordion="true"
  class="filter-tree"
  :props="defaultProps"
  @node-click="clickTreeItem"
  @node-expand="handleNodeExpand" // 展开节点时触发的函数
  @node-collapse="handleNodeCollapse" // 关闭节点时触发的函数
>
</el-tree>
定义变量
data () {
 return {
  treeList: [], // 我的树结构数据
  defaultExpandIds: [] // 这里存放要默认展开的节点 id
 }
}
method函数:
// 树节点展开
handleNodeExpand(data) {
  // 保存当前展开的节点
  let flag = false
  this.defaultExpandIds.some(item => {
    if (item === data.id) { // 判断当前节点是否存在, 存在不做处理
      flag = true
      return true
    }
  })
  if (!flag) { // 不存在则存到数组里
    this.defaultExpandIds.push(data.id)
  }
},
// 树节点关闭
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)
    })
  }
},
 
The End
layui tree elemen

相关推荐

layui后台布局实例代码
layui后台布局的实例代码,以下是详细代码: !DOCTYPE htmlhtmlhead meta charset="utf-8" meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" titlelayout 后台大布局 - Layui/title link rel="stylesheet" ...
2025-10-15 实例代码
68

LayUI登录页面页设计实例
实例代码如下: !DOCTYPE htmlhtml lang="en" head meta charset="utf-8" link rel="stylesheet" href="layui/css/layui.css" style type="text/css" .container{ width: 420px; height: 320px; min-height: 320px; max-height: 320px; position: absolute; t...
2025-04-13 实例代码
234

layui实现带清除按钮的输入框
layui实现带清除按钮的输入框,首先html文件如下: !DOCTYPE htmlhtmlhead meta charset="utf-8" meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" title测试 - layui/title link rel="stylesheet" href="layui/css/lay...
2024-12-31 实例代码
200

layui下拉多选框xm-select.js插件的使用
创建容器 xm-select-demo,选择容器 隐藏赋值取值表单; div id="selected_box" class="layui-input-inline xm-select-demo" style="width:150px;"input type="hidden" id="poi_category_id"/div 异步获取代码 //获取分类; $.ajax({ type: 'get', url: "./ap...
2024-12-23 实例代码
99

mui消息框alert,confirm,prompt,toast实例
mui消息框alert,confirm,prompt,toast实例 script type="text/javascript" charset="utf-8" //mui初始化 mui.init({ swipeBack: true //启用右滑关闭功能 }); var info = document.getElementById("info"); document.getElementById("alertBtn").addEventL...
2024-12-21 实例代码
249

layui实现根据table数据判断按钮显示情况的方法
可以根据table的数据实现判断toolbar按钮的显示状态和情况 script type="text/html" id="barDemo" {{# if(d.status ==0){ }} a class="layui-btn layui-btn-mini" lay-event="examine"查看/a a class="layui-btn layui-btn-mini" lay-event="edit"编辑/a a cl...
2024-12-13 实例代码
121