组件:
<template>
<div id="app">
<Button type="warning" @click="changes(data1, isOpen)">{{
isOpen ? "点击展开" : "点击关闭"
}}</Button>
<Tree :data="data1" @on-select-change="selectChange"></Tree>
</div>
</template>
初始化数据:
export default {
data() {
return {
isOpen: true,
data1: [
{
title: "parent 1",
children: [
{
title: "parent 1-1",
children: [
{
title: "leaf 1-1-1",
},
{
title: "leaf 1-1-2",
},
],
},
{
title: "parent 1-2",
children: [
{
title: "leaf 1-2-1",
},
{
title: "leaf 1-2-1",
},
],
},
],
},
],
};
},
isOpen控制tree是否展开与收起,false收起,true展开。
方法:
methods: {
changes(treeData, flag) {
for (let i = 0; treeData && i < treeData.length; i++) {
this.$set(treeData[i], "expand", flag);
if (treeData[i].children) {
treeData[i].children = this.changes(treeData[i].children, flag);
}
}
this.isOpen = !flag;
return treeData;
},
selectChange(data, selectedNode) {
this.$set(selectedNode, "expand", !selectedNode.expand);
},
},
使用this.$set确保被创建后的对象也是响应式,触发视图的更新。