Element 树形组件,数据刷新以后原本展开的节点被收缩的问题

出现问题的原因: el-tree 中绑定的 data 被重新赋值了

我的解决方法:

给 el-tree组件设置default-expand-keys属性 ( :default-expanded-keys="defaultExpandedKeys" ),

在数据重新赋值之前,先将当前已经展开的节点id保存起来, 放到defaultExpandedKeys中

html代码如下:

<el-tree ref="tree" :data="treeItems" :props="navProps" node-key="id"
             :current-node-key="currentNodeKey" :default-expanded-keys="defaultExpandedKeys"
             @node-click="handleNavClick" :highlight-current="true"
             :expand-on-click-node="false">

js代码如下:

setDefaultExpandedKeys() {
    // 获取树形组件实例
   let treeCompInstance = this.$refs["tree"];
   let allNodes = treeCompInstance.store._getAllNodes();
   let defaultExpandedNodes = [];
   allNodes.forEach(node => {
        node.expanded && defaultExpandedNodes.push(node.data.id);
   });
   // console.log('defaultExpandedNodes', defaultExpandedNodes);
   this.defaultExpandedKeys = defaultExpandedNodes;
  }
},
mounted() {
   // 因为项目里面嵌套了好多层组件,采用eventBus的方式绑定&触发这个函数 
   this.$eventBus.$on('setDefaultExpandedKeys', this.setDefaultExpandedKeys);
},
beforeDestroy() {
   // 切记要在销毁之前将解除事件绑定,因为如果再次进入页面,还会绑定一个            
   // setDefaultExpandedKeys方法
   this.$eventBus.$off('setDefaultExpandedKeys', this.setDefaultExpandedKeys);
},



——————————————————————————————————————————————————————
在el-tree 的data数据重新赋值之前调用:
this.$eventBus.$emit('setDefaultExpandedKeys');

切记!!生命周期函数beforeUpdate 和 updated 里面千万不要对data中的数据进行赋值,会陷入循环!!!!!!

ps: 如果想要在beforeUpdate 对某个值赋值,可以把这个值放到data之外


将节点全部收缩功能:

expandAllNodes() {
   let allNodes = this.$refs["tree"].store._getAllNodes();
   allNodes.forEach(node => {
      node.expanded = false;
   });
},

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值