vue3项目中用v-for循环出来的el-tree如何实现全选和全不选功能

vue3项目中用v-for循环出来的el-tree如何实现全选和全不选功能

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7668415
  • 这篇博客也不错, 你可以看下vue使用el-tree实现全选、反选
  • 除此之外, 这篇博客: Vue el-tree 如何实现单选中的 Vue el-tree 如何实现单选 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 最近项目用到el-tree,并且需要实现单选,搜了很多文章并研究了一下,实现代码如下,希望可以对你有帮助!

    <el-tree
              class="tree-tap"
              :data="deaplist"
              show-checkbox
              node-key="deptid"
              ref="treeForm"
              :check-on-click-node="true"
              :props="defaultProps"
              @check="changetree"
              @check-change="handleNodeClick"
            ></el-tree>
    
    data(){
    	return {
    		 deaplist: [],
            // deaplist1: [{deptname: '第十一监察检查室'},{deptname: '驻苏州银行组'}...
            defaultProps: {
              label: 'deptname',
              id: 'deptid'
            },
    	}
    }
    

    methods:

     handleNodeClick(data, checked, node) {
            console.log('多选框设为单选框', checked, data)
            console.log('data.id:  ' + data.deptid)
            console.log('data:  ' + JSON.stringify(data))
            // console.log(this.$refs.treeFrom.current-node-key)
            if (checked) {
              this.$refs.treeForm.setCheckedKeys([data.deptid])
            }
            console.log('getCheckedKeys' + this.$refs.treeForm.getCheckedKeys([data.deptid]))
          },
          
          changetree(data, lst) {
            console.log('lst:  ' + JSON.stringify(lst))
            console.log(lst.checkedKeys.length)
            if (lst.checkedKeys.length == 0) {
              //这里的treeForm是你el-tree命名的ref的值
              this.$refs.treeForm.setCheckedKeys([data.deptid])
            }
            this.getRightList()
          },
    

以下内容部分参考ChatGPT模型:


可以使用el-tree的check-strictly属性和v-model来实现全选和全不选功能。

首先,在el-tree中添加check-strictly属性,表示是否严格的遵循父子节点不联动的规则。

然后,使用v-model来绑定选中的节点数组,这样就可以通过修改选中节点数组来实现全选和全不选的功能。

具体实现代码如下:

<template>
  <el-tree
    :data="treeData"
    show-checkbox
    :props="defaultProps"
    :check-strictly="true"
    v-model="checkedNodes"
  ></el-tree>
  <div>
    <el-button @click="selectAll">全选</el-button>
    <el-button @click="deselectAll">全不选</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      treeData: [
        {
          id: 1,
          label: '一级节点1',
          children: [
            {
              id: 2,
              label: '二级节点1'
            },
            {
              id: 3,
              label: '二级节点2'
            }
          ]
        },
        {
          id: 4,
          label: '一级节点2',
          children: [
            {
              id: 5,
              label: '二级节点3'
            },
            {
              id: 6,
              label: '二级节点4'
            }
          ]
        }
      ],
      defaultProps: {
        children: 'children',
        label: 'label'
      },
      checkedNodes: []
    }
  },
  methods: {
    selectAll() {
      this.checkedNodes = this.treeData
    },
    deselectAll() {
      this.checkedNodes = []
    }
  }
}
</script>

在上面的代码中,我们首先定义了一个treeData数组作为el-tree的数据源,其中包含了两个一级节点和四个二级节点。我们将show-checkbox属性设置为true,表示显示复选框。defaultProps属性用来设置节点的props属性,这里设置了children和label两个属性。

check-strictly属性设置为true,表示严格的遵循父子节点不联动的规则。

通过v-model绑定checkedNodes数组,这个数组中存储了选中的节点。在selectAll和deselectAll方法中,分别将checkedNodes数组设置为treeData和空数组,从而实现了全选和全不选的功能。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快