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+JSon 无刷新分页实现代码
Apr 01 Javascript
jquery实现瀑布流效果分享
Mar 26 Javascript
jQuery 获取兄弟元素的几种不错方法
May 23 Javascript
jQuery使用post方法提交数据实例
Mar 25 Javascript
jQuery获得document和window对象宽度和高度的方法
Mar 25 Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 Javascript
Angularjs material 实现搜索框功能
Mar 08 Javascript
jQuery动态改变多行文本框高度的方法
Sep 07 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
vue动态生成dom并且自动绑定事件
Apr 19 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
Feb 26 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
Apr 14 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 HTML代码串截取代码
2008/12/29 PHP
php实现插入排序
2015/03/29 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
JQuery基础语法小结
2015/02/27 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python定时执行之Timer用法示例
2015/05/27 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
会计专业的自荐信
2013/12/12 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
2016年记者节感言
2015/12/08 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python
在 Python 中利用 Pool 进行多线程
2022/04/24 Python