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 相关文章推荐
JQuery Easyui Tree的oncheck事件实现代码
May 28 Javascript
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
jQuery基于当前元素进行下一步的遍历
May 20 Javascript
PHP实现的各种中文编码转换类分享
Jan 23 Javascript
jQuery 选择同时包含两个class的元素的实现方法
Jun 01 Javascript
使用BootStrap实现用户登录界面UI
Aug 10 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
浅谈Angular2 模块懒加载的方法
Oct 04 Javascript
详解vue-cli项目中怎么使用mock数据
May 29 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
Jul 22 Javascript
js+canvas实现五子棋小游戏
Aug 02 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 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
理解php原理的opcodes(操作码)
2010/10/26 PHP
PHP中PDO的错误处理
2011/09/04 PHP
php5.3 注意事项说明
2013/07/01 PHP
PHP图片上传代码
2013/11/04 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
php中的动态调用实例分析
2015/01/07 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
XENON基于JSON变种
2010/07/27 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
js document.write()使用介绍
2014/02/21 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
python包的导入方式总结
2021/03/02 Python
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
项目投资合作意向书
2014/07/29 职场文书
迟到检讨书范文
2015/01/27 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书