Vue一个案例引发的递归组件的使用详解


Posted in Javascript onNovember 15, 2018

今天我们继续使用 Vue 的撸我们的实战项目,只有在实战中我们才会领悟更多,光纸上谈兵然并卵,继上篇我们的 《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一个案例引发的递归组件的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
任意位置显示html菜单
Feb 01 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
纯js简单日历实现代码
Oct 05 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
javascript 闭包详解
Feb 15 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
vue修改vue项目运行端口号的方法
Aug 04 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
Jun 29 Javascript
js实现图片上传到服务器和回显
Jan 19 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 Javascript
【js设计模式】SOLID五大设计原则
Mar 24 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
Nov 15 #Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 #Javascript
vue 移动端适配方案详解
Nov 15 #Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
Nov 15 #Javascript
vue地址栏直接输入路由无效问题的解决
Nov 15 #Javascript
微信小程序自定义toast弹窗效果的实现代码
Nov 15 #Javascript
搭建基于express框架运行环境的方法步骤
Nov 15 #Javascript
You might like
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
10款实用的PHP开源工具
2015/10/23 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
Lucene推荐的分页方式是什么?
2015/12/07 面试题
vue项目实现分页效果
2021/03/24 Vue.js
运动会解说词50字
2014/01/18 职场文书
社区工作感言
2014/02/21 职场文书
小学班主任评语大全
2014/04/23 职场文书
党员剖析材料范文
2014/09/30 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书