vue 组件递归调用

记得以前用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')
  },
}

 

posted @ 2019-06-20 17:30  小小的忧愁  阅读(14359)  评论(0编辑  收藏  举报