vue3项目中用v-for循环出来的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()
},
可以使用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和空数组,从而实现了全选和全不选的功能。