<template>
<div class="content">
<search @getValue="getValue" />
</div>
</template>
<script>
export default {
name: "selectTree",
data() {
return {
treeListTmp: [],
treeList: [
{
name: "飞机1",
hasChild: true,
id: 1,
children: [
{
name: "数据1-1",
hasChild: true,
id: 2,
children: [
{
name: "数据1-1-1",
hasChild: false,
id: 3,
},
],
},
{
name: "火箭1-2",
hasChild: false,
id: 4,
},
],
},
{
name: "数据2",
hasChild: true,
id: 5,
children: [
{
name: "轮船2-1",
hasChild: true,
id: 6,
children: [
{
name: "数据2-1-1",
hasChild: false,
id: 7,
},
],
},
{
name: "数据2-2",
hasChild: false,
id: 8,
},
],
},
],
};
},
created() {},
methods: {
getValue(msg) {
this.treeList = [];
let treeListTmp = JSON.parse(JSON.stringify(this.treeListTmp));
let tmp = msg
? this.rebuildData(msg, treeListTmp)
: JSON.parse(JSON.stringify(treeListTmp));
this.treeList.push(...tmp);
},
rebuildData(value, arr) {
if (!arr) {
return [];
}
let newarr = [];
if (Object.prototype.toString.call(arr) === "[object Array]") {
arr.forEach((element) => {
if (element.name.indexOf(value) > -1) {
const ab = this.rebuildData(value, element.children);
const obj = {
...element,
children: ab,
};
newarr.push(obj);
} else {
if (element.children && element.children.length > 0) {
const ab = this.rebuildData(value, element.children);
const obj = {
...element,
children: ab,
};
if (ab && ab.length > 0) {
newarr.push(obj);
}
}
}
});
}
return newarr;
},
},
};
</script>
参考地址:https://blog.csdn.net/web_yueqiang/article/details/89483971