码迷,mamicode.com
首页 > 其他好文 > 详细

vue 递归组件的两种方法

时间:2021-02-15 12:41:49      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:import   his   for   组件   lis   one   type   rgb   this   

app.vue
<template>
  <div>
    <list :data="data"></list>
    <hr/>
    <render :data="data"></render>
  </div>
</template>

<script>
import list from "./list.vue";
import render from "./render.vue";
export default {
  name: "App",
  components: {
    list,
    render
  },
  data() {
    return {
      data: [
        { id: 1, name: "1" },
        {
          id: 2,
          name: "2",
          children: [
            { id: 21, name: "21" ,children:[{ id: 211, name: "211" },{ id: 212, name: "212" }]},
            { id: 22, name: "22" }
          ],
        },
        {
          id: 3,
          name: "3",
          children: [
            { id: 31, name: "31" },
            { id: 32, name: "32" },
          ],
        },
        { id: 4, name: "4" },
        { id: 5, name: "5" },
      ],
    };
  },
};
</script>

<style lang="scss" scoped>
</style>

list.vue
<template>
 <ul>
   <li v-for="item in data" :key="item.id">
     {{item.name}}
     <list v-if="item.children" :data="item.children"></list>
   </li>
 </ul>
</template>

<script>
  export default {
    name:‘list‘,
    props:{
      data:{
        type:Array,
        default(){
          return []
        }
      }
    },
    
  }
</script>

<style lang="scss" scoped>

</style>


render.vue


<script>
export default {
  name: "Render",
  props: {
    data: {
      type: Array,
      default() {
        return [];
      },
    },
  },
  render(h) {
    let items = [];
    if (this.data.length) {
      items = this.data.map((item) => {
        if (item.children) { 
          return h("li", [
            item.name,
            h("Render", {
              props: {
                data: item.children,
              },
            }
            ),
          ]
          );
        } else {
          return h("li", item.name);
        }
      });
    }
    return h("ul", items);
  },
};
</script>

<style lang="scss" scoped>
</style>

 

vue 递归组件的两种方法

标签:import   his   for   组件   lis   one   type   rgb   this   

原文地址:https://www.cnblogs.com/7c89/p/14398211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!