最近学到一招实用性的,假设一个对象里面可能无限有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里面的样子