今天咱们继续使用 Vue 的撸咱们的实战项目,只有在实战中咱们才会领悟更多,光纸上谈兵然并卵,继上篇咱们的《Vue一个案例引起的动态组件与全局事件绑定总结》 以后,今天来聊一聊咱们如何在项目中使用递归组件。vue
此次咱们主要是实现一个信息的分类展现列表存在二级/三级的分类,以下如所示:微信
看到这个不少人会想到这个实现起来很简单啊,来个嵌套循环不就完事了。学习
对,你说的没错,事实就是这样简单。那么就先来看看这么简单的列表怎么实现的,而后这个方案的劣势在哪里。spa
首先看看咱们的数据格式code
list: [{ name: "经济", children: [{ name: "如家" }, { name: "7天" }] }, { name: "温馨", children: [{ name: "智选假日" }, { name: "全季" }] }]
基于上面的数据格式,咱们的实现方式以下:component
<div class="list-item" v-for="(item, index) in list" :key="index"> <div class="item-name"> <span>{{item.name}}</span> </div> <div v-if="item.children" class="children-item"> <div v-for="(child, index) in item.children" :key="index"> <div class="item-name"> <span>{{child.name}}</span> </div> </div> </div> </div>
嗯,看上去很是完美,咱们的列表也很是好的展示出来,大功告成。递归
但是忽然有一天我们的产品忽然跑过来讲,咱们的数据如今多加了一级分类,如今变成这样子了。事件
list: [{ name: "经济", children: [{ name: "如家", children: [{ name: "长江路-如家" }, { name: "望江路-如家" }] }, { name: "7天", children: [{ name: "长江路-7天" }, { name: "望江路-7天" }] }] }]
好吧,既然产品有需求数据有变化,那么咱们就改代码吧,因而咱们在原有的代码上继续加上一层嵌套循环,此次又总算完成了,可是可能没过两天咱们的数据又增长了一级分类怎么办?仍是继续嵌套下去?ip
有些同窗可能就会以为了,哪有这么多层级的数据展现,确定不会存在的,那只能说咱们太年轻,咱们不排除这种存在的可能,那若是咱们遇到这种状况怎么办?这里就要用到咱们说的 递归组件 了,不管你的数据怎么增长咱们都不用改动咱们的代码。资源
什么是递归组件?简单来讲就是在组件中内使用组件自己,下面咱们就来看看如何在项目中使用递归组件去解决咱们上面问题。
首先咱们先建立一个 List 的递归组件
<template> <div> <div class="list-item" v-for="(item, index) in list" :key="index"> <div class="item-name"> <span>{{item.name}}</span> </div> <div v-if="item.children" class="children-item"> <list :list="item.children"></list> </div> </div> </div> </template> <script> export default { name: "List", props: { list: Array } }; </script>
注意上面的代码中咱们使用了 List 组件自己,完成这些以后,咱们在外部父级组件中使用 List 组件时,无论咱们的数据有多少层嵌套关系,均可以完美的自适应加载,咱们不再用经过嵌套嵌套在嵌套了。
<template> <div class="list-detail"> <list :list="list"></list> </div> </template> <script> import List from "./components/List"; export default { name: "Parent", components: { List }, data() { return { list: [{ name: "经济", children: [{ name: "如家", children: [{ name: "上江路-如家" }, { name: "望江路-如家" }] },{ name: "7天", children: [{ name: "长江路-7天" }, { name: "望江路-7天" }] }] }] } } } </script>
最后咱们来看看渲染后的结果
如上就是咱们今天要说的递归组件,小伙伴们赶忙上手试试吧。
相似与信息分类的展现在咱们的项目中是很是常见的形式,咱们利用递归组件能够很好的去解决问题
关注微信公众号:六小登登。领取全套学习资源