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 表格的增行删行实现思路
Mar 21 Javascript
使用js操作cookie的一点小收获分享
Sep 03 Javascript
JavaScript中读取和保存文件实例
May 08 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
May 20 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
详解如何较好的使用js
Dec 16 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
Jan 08 Javascript
JavaScript多线程运行库Nexus.js详解
Dec 22 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
Vue Cli3 创建项目的方法步骤
Oct 15 Javascript
jquery css实现流程进度条
Mar 26 jQuery
一份超级详细的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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
PHP封装的Twitter访问类实例
2015/07/18 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
python获取网页状态码示例
2014/03/30 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
学校师德承诺书
2014/05/23 职场文书
红头文件任命书范本
2014/06/05 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL