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 相关文章推荐
javascript对数组的常用操作代码 数组方法总汇
Jan 27 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
Jan 13 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
Sep 02 Javascript
js日期范围初始化得到前一个月日期的方法
May 05 Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
微信小程序开发入门基础教程
Apr 19 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
vue2实现数据请求显示loading图
Nov 28 Javascript
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 Javascript
基于vue和websocket的多人在线聊天室
Feb 01 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产生动态的影像图
2006/10/09 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
jquery foreach使用示例
2013/09/12 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
vscode 远程调试python的方法
2017/12/01 Python
Python元字符的用法实例解析
2018/01/17 Python
python获取服务器响应cookie的实例
2018/12/28 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
新闻专业个人求职信
2013/12/19 职场文书
廉洁自律承诺书
2014/03/27 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
大学生就业意向书
2015/05/11 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
pandas提升计算效率的一些方法汇总
2021/05/30 Python
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL