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

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)
    })
  }
},
  • 32
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
element el-tree是一个基于Vue.js的树形组件,可以用来显示树形结构的数据,并且提供了一些交互功能,如展开收起节点、选择节点等。 该组件可以通过设置props来自定义树的外观和行为。例如,可以设置show-checkbox属性来显示节点前的复选框,通过highlight-current属性来高亮当前选中的节点。 可以通过传递一个数组给data属性来初始化树的数据。 在创建组件的时候,可以使用created钩子函数来对数据进行处理。例如,可以使用dg方法来遍历数据,并对节点进行一些操作,如设置disabled属性来禁用某些节点。 对于动态加载、新增、更新节点的实现,可以参考引用中提供的示例代码。根据示例,可以使用check-change事件来监听节点的选中状态变化,并通过this.$refs.users.getCheckedNodes(true)获取选中的节点。 总的来说,element el-tree组件提供了丰富的功能和灵活的配置选项,可以方便地展示和操作树形结构的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【Elementel-tree 树形控件](https://blog.csdn.net/wuli_youhouli/article/details/127885319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [element el-tree组件的动态加载、新增、更新节点的实现](https://download.csdn.net/download/weixin_38500607/12927699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值