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小游戏实现代码
Aug 19 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
Feb 05 Javascript
js中substring和substr的详细介绍与用法
Aug 29 Javascript
javascript简单事件处理和with用法介绍
Sep 16 Javascript
jQuery实现div浮动层跟随页面滚动效果
Feb 11 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
Apr 16 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
Apr 25 Javascript
vue.js实现条件渲染的实例代码
Jun 22 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
Dec 07 Javascript
ES6关于Promise的用法详解
May 07 Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 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
destoon整合UCenter图文教程
2014/06/21 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Django REST framework视图的用法
2019/01/16 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
非常详细的C#面试题集
2016/07/13 面试题
文明青少年标兵事迹材料
2014/01/28 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
万能检讨书
2015/01/27 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
一个都不能少观后感
2015/06/04 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书