vue用name属性实现组件递归

本文介绍了在Vue中如何通过组件递归实现无限层级的数据渲染。关键在于子组件利用`v-for`循环遍历接收到的`arrlist`属性,并在内部条件判断下继续渲染其children。父组件只需传递数据,子组件负责具体渲染过程。
摘要由CSDN通过智能技术生成

最近学到一招实用性的,假设一个对象里面可能无限有children,我们要无限循环渲染,应该怎么做?

vue里最简单的方法是用到name

  • 上重点!

    这个name方法的核心是需要写在子组件,真正拿到数据,v-for循环的地方是在子组件,也就是说,渲染的过程是在子组件,而父组件只需要引入就可以

    父组件写法

<template>
  <div class="hello">
    <DetailList :arrlist="arrlist" />
  </div>
</template>

<script>
import DetailList from "./children.vue";
export default {
  name: "ArrList",
  components: {
    DetailList,
  },
  data() {
    return {
      arrlist: [
      {
          name: "苹果",
          price: "5$",
          children: [
            {
              name: "苹果1",
              price: "5$",
            },
            {
              name: "苹果2",
              price: "5$",
              children: [
                {
                  name: "苹果22",
                  price: "5$",
                },
                {
                  name: "苹果23",
                  price: "5$",
                },
              ],
            },
            {
              name: "苹果3",
              price: "5$",
            },
          ],
        },]
    };
  },
};
</script>

子组件写法

<template>
    <ul>
      <li v-for="item in arrlist" :key="item.index">
        {{ item.name }}
          <div v-if="item.children && item.children.length > 0 ? true : false">
            <detail-list :arrlist="item.children"> </detail-list>
          </div>
      </li>
    </ul>

</template>

<script>
export default {
  name: "DetailList",
  props: {
    arrlist: Array,
  },
};
</script>

上面的detail-list组件是为了规范写法才形成这种形式,要是不想变可以就写成name里面的样子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值