![在这里插入图片描述](https://img-blog.csdnimg.cn/c4c7f3781cca46b5b49feb55aff80226.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5puy5puy,size_20,color_FFFFFF,t_70,g_se,x_16)
需求
- 根据所有数据展示树形结构
- 根据选中数据获取选中节点的keys集合,渲染默认选中的节点
根据选中数据获取选中节点的keys集合
const checkedData = [
{
title: "0-0",
key: "0-0",
children: [
{
title: "0-0-0",
key: "0-0-0",
children: [{ title: "0-0-0-0", key: "0-0-0-0" }],
},
{
title: "0-0-2",
key: "0-0-2",
},
],
},
{
title: "0-1",
key: "0-1",
children: [
{ title: "0-1-0-0", key: "0-1-0-0" },
{ title: "0-1-0-1", key: "0-1-0-1" },
{ title: "0-1-0-2", key: "0-1-0-2" },
],
},
{
title: "0-2",
key: "0-2",
},
];
mounted() {
this.checkedData.forEach((item) => {
this.getDefaultKeys(item, this.checkedKeys);
});
},
methods: {
getDefaultKeys(node, arr) {
if (!node.children) {
return arr.push(node.key);
}
node.children.forEach((item) => {
this.getDefaultKeys(item, arr);
});
},
}
整个组件代码
<template>
<div>
<a-tree
v-model="checkedKeys"
checkable
:expanded-keys="expandedKeys"
:auto-expand-parent="autoExpandParent"
:selected-keys="selectedKeys"
:tree-data="treeData"
@expand="onExpand"
@select="onSelect"
/>
</div>
</template>
<script>
const treeData = [
{
title: "0-0",
key: "0-0",
children: [
{
title: "0-0-0",
key: "0-0-0",
children: [
{ title: "0-0-0-0", key: "0-0-0-0" },
{ title: "0-0-0-1", key: "0-0-0-1" },
{ title: "0-0-0-2", key: "0-0-0-2" },
],
},
{
title: "0-0-1",
key: "0-0-1",
children: [
{ title: "0-0-1-0", key: "0-0-1-0" },
{ title: "0-0-1-1", key: "0-0-1-1" },
{ title: "0-0-1-2", key: "0-0-1-2" },
],
},
{
title: "0-0-2",
key: "0-0-2",
},
],
},
{
title: "0-1",
key: "0-1",
children: [
{ title: "0-1-0-0", key: "0-1-0-0" },
{ title: "0-1-0-1", key: "0-1-0-1" },
{ title: "0-1-0-2", key: "0-1-0-2" },
],
},
{
title: "0-2",
key: "0-2",
},
];
const checkedData = [
{
title: "0-0",
key: "0-0",
children: [
{
title: "0-0-0",
key: "0-0-0",
children: [{ title: "0-0-0-0", key: "0-0-0-0" }],
},
{
title: "0-0-2",
key: "0-0-2",
},
],
},
{
title: "0-1",
key: "0-1",
children: [
{ title: "0-1-0-0", key: "0-1-0-0" },
{ title: "0-1-0-1", key: "0-1-0-1" },
{ title: "0-1-0-2", key: "0-1-0-2" },
],
},
{
title: "0-2",
key: "0-2",
},
];
export default {
data() {
return {
expandedKeys: ["0-0-0"],
autoExpandParent: true,
selectedKeys: [],
treeData,
checkedData,
checkedKeys: [],
};
},
watch: {
checkedKeys(val) {
console.log("onCheck", val);
},
},
mounted() {
this.checkedData.forEach((item) => {
this.getDefaultKeys(item, this.checkedKeys);
});
},
methods: {
getDefaultKeys(node, arr) {
if (!node.children) {
return arr.push(node.key);
}
node.children.forEach((item) => {
this.getDefaultKeys(item, arr);
});
},
onExpand(expandedKeys) {
console.log("onExpand", expandedKeys);
this.expandedKeys = expandedKeys;
this.autoExpandParent = false;
},
onCheck(checkedKeys) {
console.log("onCheck", checkedKeys);
this.checkedKeys = checkedKeys;
},
onSelect(selectedKeys, info) {
console.log("onSelect", info);
this.selectedKeys = selectedKeys;
},
},
};
</script>
<style lang="less" scoped></style>