記得以前用react寫過一個遞歸渲染菜單欄,當時就想過如果用vue如何實現。最近項目又用到了vue,就決定利用閑暇時間研究一下。render函數這種方法就不說了,和react的方法差不多,這里主要寫一下vue組件之間的遞歸調用。
最后效果基本就是一個類似這種的樹形結構,當然樣式自己可以更改

渲染樹的組件,循環父組件傳過來的數據,如果有children就在遞歸調用自身組件name值
<template>
<ul class="tree">
<li v-for="(item,index) in treedata" :key="index">
<div class="ui-draggable ui-draggable-handle ui-droppable">
{{item.text}}
</div>
<my-tree v-if="item.children && item.children.length>0" :treedata="item.children"></my-tree>
</li>
</ul>
</template>
<script>
export default {
name: "myTree",
props:{
treedata:{
default:function(){
return []
}
}
},
}
父組件只需要傳過去數據就可以了,下面的組件引入方式參考vue文檔
<template>
<div>
<div class="overflow">
<div>
<linTree :treedata="treeData"></linTree>
</div>
</div>
</div>
</template>
<script>
export default {
name: "zp",
data() {
return {
treeData:[
{text:1,children:[
{text:2,children:[{text:5},{text:'55'}]},
{text:3},
{text:4},
]}
]
};
},
components: { linTree: () => import('./components/treeContents')
},
}
