el-tree 展开关闭全部

最近使用 element-ui 中的 tree ,发现设置一个按钮展开关闭全部很难,想出下面的解决办法,解决了,但是感觉不是很好

思路主要就是 使用 v-if 控制 整个tree的显示隐藏,使它重新渲染

<template>
  <div class='home-activity'>
    <div class="c-a-right">
        <el-button @click="open()">展开/关闭</el-button>
        <el-tree
          v-if="openOrNot"
          class="filter-tree"
          :data="data2"
          :props="defaultProps"
          :default-expand-all="defaultExpand"
          :filter-node-method="filterNode"
          node-key="navId" 
          ref="tree">
        </el-tree>
      </div>
  </div>
</template>

<script>
  export default {
    name: 'home-activity',
    components: {},
    data() {
      return {
        
        defaultExpand: true,
        openOrNot: true,

        data2: [{
          id: 1,
          label: '一级 1',
          children: [{
            id: 4,
            label: '二级 1-1',
            children: [{
              id: 9,
              label: '三级 1-1-1'
            }, {
              id: 10,
              label: '三级 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: '一级 2',
          children: [{
            id: 5,
            label: '二级 2-1'
          }, {
            id: 6,
            label: '二级 2-2'
          }]
        }, {
          id: 3,
          label: '一级 3',
          children: [{
            id: 7,
            label: '二级 3-1'
          }, {
            id: 8,
            label: '二级 3-2'
          }]
        }],
        defaultProps: {
        id:'navId',
        children: 'children',
              label: 'label',
        disabled:'navOffOn' 
        },
      }
    },
    computed: {},
    watch: {},
    methods: {
      filterNode(value, data) {
        if (!value) return true;
        return data.label.indexOf(value) !== -1;
      },
      open() {
        this.defaultExpand = !this.defaultExpand
        this.openOrNot = false;
        setTimeout(() => {
          this.openOrNot = true;
        }, 10);
      }
    },
    created() {},
    mounted() {},
    beforeDestroy() {}
  }
</script>

<style lang='scss' scoped>
  .home-activity {
    width: 100%;
    height: 100%;
  }

  .d-header {
    color: white;

    .h-title {
      padding-top: 15px;
    }
  }

  .d-content {
    display: flex;

    .c-a-left {
      width: 30%;
      height: 100%;
      text-align: left;
      border-right: 2px solid $c-light-gray;
    }

    .c-a-right {
      width: 70%;
      height: 100%;
    }
  }
</style>

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用 Element UI 的 Tree 组件时,可以通过 `default-expand-all` 或者 `default-expanded-keys` 属性来设置默认展开的节点,但是如果需要动态控制节点的展开关闭,需要进行以下操作: 1. 在树形结构数据中添加一个 `children` 属性,表示当前节点的子节点 2. 在 `el-tree` 的 `node-click` 事件中调用 `loadNode` 方法,加载当前节点的子节点数据 3. 在 `el-tree` 的 `expand-change` 事件中更新当前节点的 `children` 属性为新的子节点数据 4. 在 `el-tree` 的 `render-content` 事件中判断当前节点是否含有子节点,如果有则渲染展开/关闭图标 以下是一个简单的示例代码: ```html <template> <el-tree :data="treeData" :render-content="renderContent" :load="loadNode" @node-click="handleNodeClick" @expand-change="handleExpandChange"></el-tree> </template> <script> export default { data() { return { treeData: [ { id: 1, label: '节点1', isLeaf: false, children: [] } ] } }, methods: { loadNode(node, resolve) { // 加载子节点数据 setTimeout(() => { resolve([ { id: 2, label: '子节点1', isLeaf: true }, { id: 3, label: '子节点2', isLeaf: true }, { id: 4, label: '子节点3', isLeaf: true } ]) }, 1000) }, handleNodeClick(node) { // 点击节点时展开/关闭节点 this.$refs.tree.toggleNode(node) }, handleExpandChange(node, expanded) { // 更新节点的子节点数据 if (expanded) { this.loadNode(node, (children) => { this.$set(node, 'children', children) }) } else { this.$set(node, 'children', []) } }, renderContent(h, { node, data }) { // 自定义节点内容,包括展开/关闭图标 const hasChildren = data.children && data.children.length const expandIcon = node.expanded ? 'el-icon-minus' : 'el-icon-plus' return ( <span> <i class={'el-icon-caret-right' + (hasChildren ? ' has-children ' + expandIcon : '')}></i> {data.label} </span> ) } } } </script> ``` 在这个示例中,我们定义了一个树形结构的数据 `treeData`,其中每个节点包含一个 `children` 属性,表示当前节点的子节点。在 `el-tree` 的 `node-click` 事件中调用 `toggleNode` 方法切换节点的展开状态,然后在 `el-tree` 的 `expand-change` 事件中根据节点的展开状态加载或清空子节点数据。在 `el-tree` 的 `render-content` 事件中判断当前节点是否含有子节点,如果有则渲染展开/关闭图标。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值