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一些实用技巧小结
Mar 18 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
JS 仿腾讯发表微博的效果代码
Dec 25 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
Jun 20 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
js实现文字选中分享功能
Jan 25 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
js使用文件流下载csv文件的实现方法
Jul 15 Javascript
微信小程序(订阅消息)功能
Oct 25 Javascript
jquery实现吸顶导航效果
Jan 08 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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
PHP的分页功能
2007/03/21 PHP
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
解析php中const与define的应用区别
2013/06/18 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
jquery 学习之一 对象访问
2010/11/23 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
Python标准库os.path包、glob包使用实例
2014/11/25 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
Django 静态文件配置过程详解
2019/07/23 Python
python 实现单通道转3通道
2019/12/03 Python
Django values()和value_list()的使用
2020/03/31 Python
python操作toml文件的示例代码
2020/11/27 Python
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
军事博物馆观后感
2015/06/05 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
mysql如何能有效防止删库跑路
2021/10/05 MySQL