今天我们继续使用 Vue 的撸我们的实战项目,只有在实战中我们才会领悟更多,光纸上谈兵然并卵,继上篇我们的 《Vue一个案例引发的动态组件与全局事件绑定总结》 之后,今天来聊一聊我们如何在项目中使用递归组件。
信息的分类展示列表
这次我们主要是实现一个信息的分类展示列表存在二级/三级的分类,如下如所示:
看到这个很多人会想到这个实现起来很简单啊,来个嵌套循环不就完事了。
对,你说的没错,事实就是这样简单。那么就先来看看这么简单的列表怎么实现的,然后这个方案的劣势在哪里。
首先看看我们的数据格式
list: [{ name: "经济", children: [{ name: "如家" }, { name: "7天" }] }, { name: "舒适", children: [{ name: "智选假日" }, { name: "全季" }] }]
基于上面的数据格式,我们的实现方式如下:
<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天" }] }] }]
好吧,既然产品有需求数据有变化,那么我们就改代码吧,于是我们在原有的代码上继续加上一层嵌套循环,这次又总算完成了,但是可能没过两天我们的数据又增加了一级分类怎么办?还是继续嵌套下去?
有些同学可能就会觉得了,哪有这么多层级的数据展示,肯定不会存在的,那只能说我们太年轻,我们不排除这种存在的可能,那如果我们遇到这种情况怎么办?这里就要用到我们说的 递归组件 了,无论你的数据怎么增加我们都不用改动我们的代码。
递归组件
什么是递归组件? 简单来说就是在组件中内使用组件本身 ,下面我们就来看看如何在项目中使用递归组件去解决我们上面问题。
首先我们先创建一个 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>
最后我们来看看渲染后的结果
总结
如上就是我们今天要说的递归组件,小伙伴们赶紧上手试试吧。
类似与信息分类的展示在我们的项目中是非常常见的形式,我们利用递归组件可以很好的去解决问题
以上所述是小编给大家介绍的Vue一个案例引发的递归组件的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍vue 递归组件的简单使用示例,包括了vue 递归组件的简单使用示例的使用技巧和注意事项,需要的朋友参考一下 前言 递归 相信很多同学已经不陌生了,算法中我们经常用递归来解决问题。比如经典的:从一个全为数字的数组中找出其中相加能等于目标数的组合。思路也不难,循环数组取值,不断递归相加,直到满足目标数条件。递归虽然能解决大部分,但弊处在于,很容易写出死循环的代码,导致爆栈。下面以我实际
本文向大家介绍详解Vue一个案例引发「内容分发slot」的最全总结,包括了详解Vue一个案例引发「内容分发slot」的最全总结的使用技巧和注意事项,需要的朋友参考一下 今天我们继续来说说 Vue,目前一直在自学 Vue 然后也开始做一个项目实战,我一直认为在实战中去发现问题然后解决问题的学习方式是最好的,所以我在学习一些 Vue 的理论之后,就开始自己利用业余时间做了一个项目,然后通过项目中的一些
本文向大家介绍Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现,包括了Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现的使用技巧和注意事项,需要的朋友参考一下 写在前面 首先,本篇文章所开发的组件并非一个已经开源的上线组件,所以如果你急于需要一个插件来只做你的项目,那么并不能带给你及时的帮助。这个组件的开发预计写两篇文章,一遍写组件,一篇写组件逻辑。这篇文章也是
本文向大家介绍vue组件中使用props传递数据的实例详解,包括了vue组件中使用props传递数据的实例详解的使用技巧和注意事项,需要的朋友参考一下 在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递。父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息。看看它们是怎么工作的。 一、基本用法 组件不仅仅是要把模板的内容进行复用,更重要的是组件间要进行
本文向大家介绍通过npm引用的vue组件使用详解,包括了通过npm引用的vue组件使用详解的使用技巧和注意事项,需要的朋友参考一下 什么是组件:组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展。 如何注册组件? 需
本文向大家介绍详解Nginx proxy_pass的一个/斜杠引发的血案,包括了详解Nginx proxy_pass的一个/斜杠引发的血案的使用技巧和注意事项,需要的朋友参考一下 背景 一个nginx的server模块下需要proxy到两个server,所以就通过location的不同路径来区分转发到不同的服务器上。 一开始是这么写的 但是忘记了server1上有个服务路径是/indexNew,结