element-ui的tree树形组件怎么控制全部展开和全部折叠啊?

element-ui的tree树形组件怎么控制全部展开和全部折叠啊?有一个default-expand-all 是否默认展开所有节点的属性,只在第一次初始化tree的时候有效,改变这个属性的值好像不能控制展开折叠,请问有什么方法吗

阅读 26.6k
5 个回答
for(var i=0;i<this.$refs.treeX.store._getAllNodes().length;i++){
           this.$refs.treeX.store._getAllNodes()[i].expanded=this.isexpand;
        }


this.$refs.treeX是树对象,通过树对象获取所有的树节点,遍历树节点设置expand属性为true则全部展开,设置为false则全部收起

貌似目前这个 store 对象已经修改过了。目前的对象包含的属性如下截图:
clipboard.png

可以通过设置 this.$refs.attrList.store.defaultExpandAll = true; 解决,已亲测

我的做法就是 v-if=false 延时一会 v-if=true

上面没有一个能用的

expandAllStatus: 是控制展开与折叠的状态(true/false)
myTree: 自己的Tree ref名

onExpandAll() {
  // 遍历tree结构修改展开与折叠是个异步行为,会耗时间,所以要写promise
  let task = new Promise((resolve, reject) => {
    this.expandAllStatus = !this.expandAllStatus;
    resolve();
  }).then(() => {
    this.treeNodeExpand(this.expandAllStatus)
  })
},
treeNodeExpand(status) {
  // 这是个耗时操作
  for(var i=0;i<this.$refs.myTree.store._getAllNodes().length;i++){
    this.$refs.myTree.store._getAllNodes()[i].expanded = status;
  }
},
新手上路,请多包涵

2023 年了,不知道还有没有用element开发新项目的或者修改问题的。正好也在开发的时候遇到了这堆问题然后上面的回答无一例外在我的情况中(单元素的一级节点)根本不起作用,然后尝试改了一下,思路也是去遍历$refs.tree.store.root.node,这里会储存所有节点状态,然后更改此处的状态就可以触发dom重新渲染。给出示例代码:

<template>
  <div><el-tree :data="treeData" ref="tree" :default-expand-all="false"></el-tree>
    <el-button @click="handleExpandAll">展开全部</el-button>
    <el-button @click="handleCollapseAll">折叠全部</el-button></div>

</template>

<script>
export default {
  data() {
    return {
      treeData: [
        {
          id: 1,
          label: '一级节点 1',
          children: [
            {
              id: 2,
              label: '二级节点 1-1'
            },
            {
              id: 3,
              label: '二级节点 1-2'
            }
          ]
        },
        {
          id: 4,
          label: '一级节点 2',
          children: [
            {
              id: 5,
              label: '二级节点 2-1'
            },
            {
              id: 6,
              label: '二级节点 2-2'
            }
          ]
        }
      ]
    };
  },
  methods: {
    handleExpandAll() {
      const tree = this.$refs.tree;
      this.traverseTree(tree.store.root, (node) => {
        node.expanded = true;
      });
    },
    handleCollapseAll() {
      const tree = this.$refs.tree;
      this.traverseTree(tree.store.root, (node) => {
        node.expanded = false;
      });
    },
    traverseTree(node, callback) {
      if (!node) return;
      callback(node);
      const children = node.root ? node.root.childNodes : node.childNodes;
      if (children) {
        children.forEach((child) => {
          this.traverseTree(child, callback);
        });
      }
    }
  }
};
</script>

点击按钮后通过遍历各个节点更改状态实现展开或折叠

推荐问题
宣传栏