<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