Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue一个案例引发的递归组件的使用

Vue一个案例引发的递归组件的使用

原创
作者头像
六小登登
发布于 2018-11-15 14:07:56
发布于 2018-11-15 14:07:56
1.1K0
举报
文章被收录于专栏:Modeng的专栏Modeng的专栏

今天我们继续使用 Vue 的撸我们的实战项目,只有在实战中我们才会领悟更多,光纸上谈兵然并卵,继上篇我们的《Vue一个案例引发的动态组件与全局事件绑定总结》 之后,今天来聊一聊我们如何在项目中使用递归组件。

信息的分类展示列表

这次我们主要是实现一个信息的分类展示列表存在二级/三级的分类,如下如所示:

看到这个很多人会想到这个实现起来很简单啊,来个嵌套循环不就完事了。

对,你说的没错,事实就是这样简单。那么就先来看看这么简单的列表怎么实现的,然后这个方案的劣势在哪里。

首先看看我们的数据格式

代码语言:txt
AI代码解释
复制
list: [{

    name: "经济",

    children: [{

        name: "如家"

    }, {

        name: "7天"     

    }]

}, {

    name: "舒适",

    children: [{

        name: "智选假日"

    }, {

        name: "全季"     

    }]

}]

基于上面的数据格式,我们的实现方式如下:

代码语言:txt
AI代码解释
复制
<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>

嗯,看上去非常完美,我们的列表也非常好的展现出来,大功告成。

可是突然有一天咱们的产品突然跑过来说,我们的数据现在多加了一级分类,现在变成这样子了。

代码语言:txt
AI代码解释
复制
list: [{

    name: "经济",

    children: [{

        name: "如家",

        children: [{

            name: "长江路-如家"

        }, {

            name: "望江路-如家"     

        }]

    }, {

        name: "7天",

        children: [{

            name: "长江路-7天"

        }, {

            name: "望江路-7天"     

        }]

    }]

}]

好吧,既然产品有需求数据有变化,那么我们就改代码吧,于是我们在原有的代码上继续加上一层嵌套循环,这次又总算完成了,但是可能没过两天我们的数据又增加了一级分类怎么办?还是继续嵌套下去?

有些同学可能就会觉得了,哪有这么多层级的数据展示,肯定不会存在的,那只能说我们太年轻,我们不排除这种存在的可能,那如果我们遇到这种情况怎么办?这里就要用到我们说的 **递归组件** 了,无论你的数据怎么增加我们都不用改动我们的代码。

递归组件

什么是递归组件?**简单来说就是在组件中内使用组件本身**,下面我们就来看看如何在项目中使用递归组件去解决我们上面问题。

首先我们先创建一个 List 的递归组件

代码语言:txt
AI代码解释
复制
<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 组件时,不管我们的数据有多少层嵌套关系,都可以完美的自适应加载,我们再也不用通过嵌套嵌套在嵌套了。

代码语言:txt
AI代码解释
复制
<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>

最后我们来看看渲染后的结果

总结

如上就是我们今天要说的递归组件,小伙伴们赶紧上手试试吧。

类似与信息分类的展示在我们的项目中是非常常见的形式,我们利用递归组件可以很好的去解决问题

文中如有不足之处,欢迎大神留言,拍砖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
生活中大家应该会拍不少照片吧?很早之前小俊就有了照片、视频备份的困扰,早些年使用安卓手机的时候只用过度盘进行备份,那体验极差(,现在使用 iCloud 的体验还是很棒的。小俊前几天发现了一个程序,emmm,官方好像称之为“解决方案”——Immich,它支持通过 APP 从 iOS 、Android 设备备份照片与视频至服务器中,不仅如此,它还支持多用户、共享相册、后台备份等功能。小俊也是立马来推荐给大家啦!还带来了它的部署教程哦!滑下去细看吧!
小俊是我
2023/07/22
5.7K0
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
【教程】使用轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
就在前天,腾讯云轻量应用服务器已经一周年啦!腾讯也推出了对于老用户的回馈活动,有需要了解的可以查看我上一篇的文章噢!今天博主继续给大家带来腾讯云轻量应用服务器的玩法,最近用腾讯会议用的有点点多,我朋友也刚好也有私域会议的需求,所以我们今天来折腾一个视频会议系统(不是抢腾讯会议蛋糕,主要是方便自己哈哈哈,让我们轻松召开视频会议!
小俊是我
2021/10/05
10.8K9
【教程】使用轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
【实用的开源项目】使用服务器部署Wiki.js,一个美观且强大的开源Wiki程序
上个月小俊介绍了一款支持跨平台、跨终端的在线文档、知识库管理程序: MrDoc觅思文档 ,后来又在寻找有没有其他的程序,这不,美观且强大的开源Wiki程序: Wiki.js ,简单使用之后,感觉还不错,也推荐给大家,现在就教大家如何部署这款程序。
小俊是我
2023/07/15
4.5K6
【实用的开源项目】使用服务器部署Wiki.js,一个美观且强大的开源Wiki程序
【实用的开源项目】使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!
第三期【实用的开源项目】教程为大家介绍一下 TaleBook ,教大家使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!这篇文章是详细的文字版,若希望方便查看视频,请向下滑动,查看视频,或者直接到 BiliBili 搜索 我是小俊呀 ,查找视频哦!
小俊是我
2022/09/08
4.8K1
【实用的开源项目】使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!
【实用的开源项目】使用云服务器部署Mattermost,强大的开发人员协作平台,更是一款高大上的聊天室!
不知不觉【实用的开源项目】系列已经来到第四期了啊。今天为大家介绍一下 Mattermost ,教大家使用云服务器部署 Mattermost ,简洁、强大的私人书籍管理系统!这篇文章是详细的文字版,若希望查看教程视频,请向下滑动,查看视频!
小俊是我
2022/09/25
8.4K2
【实用的开源项目】使用云服务器部署Mattermost,强大的开发人员协作平台,更是一款高大上的聊天室!
【实用的开源项目】使用服务器部署changedetection.io,一个网站更改检测、监控和通知的开源工具
今天给大家介绍一下 changedetection.io 这一款网站变更监控和通知工具,它的功能非常强大,支持用 Chrome浏览器 来提取网页内容,这样就可以抓取到一些用 js 填充内容的网页,更好地支持更多的网站。
小俊是我
2023/01/31
2.9K0
【实用的开源项目】使用服务器部署changedetection.io,一个网站更改检测、监控和通知的开源工具
【实用的开源项目】使用云服务器部署Chemex,让软硬件资产的管理更加智能、高效!
【实用的开源项目】系列文章的新项目我都会将视频教程的文字版和视频版合并啦!今天,我有一种急切的心情介绍这一个新的开源项目,那么我们第二期【实用的开源项目】的主题就是使用腾讯云轻量应用服务器搭建Chemex!这篇文章是详细的文字版,若希望方便查看视频,请向下滑动,查看视频,或者直接到 BiliBili 搜索 我是小俊呀 ,查找视频哦!
小俊是我
2022/08/31
5.5K1
【实用的开源项目】使用云服务器部署Chemex,让软硬件资产的管理更加智能、高效!
【好玩儿的Docker项目】10分钟搭建一个轻量、快速、美观的个人导航页面——Flare
一直有小伙伴想要咕咕介绍用docker搭建导航页面,今天咕咕就推荐一个苏洋大佬受到Flame启发,在此基础上优化而来的新项目Flare
二十五画生
2023/02/27
9.2K0
【好玩儿的Docker项目】10分钟搭建一个轻量、快速、美观的个人导航页面——Flare
锐驰云端 轻速上云 腾讯云锐驰型轻量云服务器简单测评及其一应用——部署PhotoPrism
继2024年12月26日阿里云上架了200M峰值带宽不限制流量的轻量云服务器后,昨晚22:30,腾讯云也正式推出并全量发售自家的200M峰值带宽不限制流量的轻量云服务器——“腾讯云轻量应用服务器锐驰型套餐”,那么,小俊第一时间自费自购了一台2C2G200M的机器,接下来就带大家来抢先实机测评一下腾讯云轻量应用服务器锐驰型套餐以及小俊想到的其中一个主要应用场景吧!
小俊是我
2025/01/22
1.2K0
锐驰云端 轻速上云 腾讯云锐驰型轻量云服务器简单测评及其一应用——部署PhotoPrism
【实用的开源项目】使用服务器部署MrDoc,一个支持跨平台、跨终端的在线文档、知识库管理程序
之前小俊也用过不少知识库管理系统,不过也是很久之前啦,最近发现了一个支持跨平台、跨终端的在线文档、知识库管理程序叫作 MrDoc觅思文档 ,简单使用之后,感觉还不错,推荐给大家,也作为 【实用的开源项目】 中的一期教程教大家如何部署这款程序。
小俊是我
2023/06/09
3.3K0
【实用的开源项目】使用服务器部署MrDoc,一个支持跨平台、跨终端的在线文档、知识库管理程序
【实用的开源项目】使用服务器部署Whiteboard,一个轻量级、可轻松定制的协作白板
平时小俊白板用的挺多的,前两天在学校就想着有没有一个轻量化的在线白板(?于是小俊搜寻了一番,还真找到一个名字叫 Whiteboard 的基于 MIT 许可开源的一个项目,安装体验一番之后,个人感觉很不错,推荐给大家,出一期教程教大家如何部署这款程序。
小俊是我
2023/04/21
1.4K0
【实用的开源项目】使用服务器部署Whiteboard,一个轻量级、可轻松定制的协作白板
【实用的开源项目】使用服务器部署memos,一款拥有社交功能的、好看的自托管备忘录
就快要2023年啦,这是【实用的开源项目】系列的第六期了诶,这一期给大家介绍一下 memos 这一款拥有社交功能的自托管备忘录,这篇文章是详细的文字版,若希望查看教程视频,请向下滑动,查看视频,或者直接到 BiliBili 搜索 我是小俊呀 ,查找视频哦!
小俊是我
2022/12/29
3.8K0
【实用的开源项目】使用服务器部署memos,一款拥有社交功能的、好看的自托管备忘录
【好玩儿的Docker项目】10分钟搭建一个高颜值的在线工具箱,用户体验很棒!
GitHub官方仓库:https://github.com/CorentinTh/it-tools
二十五画生
2023/10/24
2.2K2
【好玩儿的Docker项目】10分钟搭建一个高颜值的在线工具箱,用户体验很棒!
【好玩儿的Docker项目】2023重制版本!10分钟搭建一个专属的密码管理工具——Vaultwarden
之前的教程:【保姆级教程】利用宝塔面板 + Docker 搭建一个优秀的密码管理器 ——Bitwarden
二十五画生
2023/11/28
2.2K0
【好玩儿的Docker项目】2023重制版本!10分钟搭建一个专属的密码管理工具——Vaultwarden
【实用的开源项目】使用服务器部署Hoarder,一款集成AI且界面美观的书签管理器
差不多三年前(一晃眼三年了,时间过得太快啦),小俊写过一篇教大家安装 LinkAce 的文章,现在小俊又来给大家介绍一款集成了当下最热门的 AI 技术且界面相对较为美观的书签管理器——hoarder,有了它,大家就能更加方便地管理自己收藏的网站与知识啦!
小俊是我
2024/06/16
1.5K2
【实用的开源项目】使用服务器部署Hoarder,一款集成AI且界面美观的书签管理器
【好玩儿的Docker项目】10分钟部署一个类似知乎的开源问答平台——Answer
Answer是一个类似知乎的开源问答社区。支持Docker部署,目前GitHub拥有5.4K的star。
二十五画生
2023/01/16
3.8K0
【好玩儿的Docker项目】10分钟部署一个类似知乎的开源问答平台——Answer
【好玩儿的Docker项目】用腾讯云轻量应用服务器10分钟搭建一个轻量的视频分享网站——Fireshare
文章首发于:https://blog.laoda.de/archives/docker-compose-install-fireshare
二十五画生
2022/11/10
3.7K0
【好玩儿的Docker项目】用腾讯云轻量应用服务器10分钟搭建一个轻量的视频分享网站——Fireshare
【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat
这周和大家分享一个开源的即时聊天项目。也是作者@moonrailgun强烈推荐咕咕用的。
二十五画生
2023/01/11
5K0
【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat
【实用的开源项目】使用服务器部署Audiobookshelf,一个自托管有声读物和播客服务器
昨天小俊发现了一个不错的程序: Audiobookshelf ,它是一个自托管有声读物和播客服务器,它可以直接在程序中搜索 播客 资源,小俊粗略的看了一下,资源还是很多的,并且该程序配套有 Android 和 IOS 客户端,方便使用!今天出一个教程教大家如何部署 Audiobookshelf 。
小俊是我
2023/04/05
5K1
【实用的开源项目】使用服务器部署Audiobookshelf,一个自托管有声读物和播客服务器
【教程】使用腾讯云轻量应用服务器搭建Mirotalk,让自己拥有一个视频聊天平台!
现在这个时代,个人不论小白还是大佬,搭建网站都有许多方法与平台,但是在服务器的选择上,当然是本文的主角:腾讯云轻量应用服务器更具性价比,为什么?下面准备工作一一为你介绍,所以今天,小俊继续给大家带来腾讯云轻量应用服务器的玩法,相信很多人都在网课、远程办公中接触过许多的视频授课、视频聊天、视频会议平台吧,也有不少人想搭建自己的一个视频聊天、屏幕共享平台供小圈子、私域流量或者朋友使用、玩耍,而且今天是七夕,我们还可以搭建一个 Mirotalk ,跟自己的那个他/她用于视频聊天吧!所以,今天小俊给大家带来搭建 Mirotalk 这一个视频聊天、屏幕共享平台!
小俊是我
2021/08/14
3.4K0
【教程】使用腾讯云轻量应用服务器搭建Mirotalk,让自己拥有一个视频聊天平台!
推荐阅读
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
5.7K0
【教程】使用轻量应用服务器搭建Jitsi Meet视频会议系统,轻松召开私域视频会议!
10.8K9
【实用的开源项目】使用服务器部署Wiki.js,一个美观且强大的开源Wiki程序
4.5K6
【实用的开源项目】使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!
4.8K1
【实用的开源项目】使用云服务器部署Mattermost,强大的开发人员协作平台,更是一款高大上的聊天室!
8.4K2
【实用的开源项目】使用服务器部署changedetection.io,一个网站更改检测、监控和通知的开源工具
2.9K0
【实用的开源项目】使用云服务器部署Chemex,让软硬件资产的管理更加智能、高效!
5.5K1
【好玩儿的Docker项目】10分钟搭建一个轻量、快速、美观的个人导航页面——Flare
9.2K0
锐驰云端 轻速上云 腾讯云锐驰型轻量云服务器简单测评及其一应用——部署PhotoPrism
1.2K0
【实用的开源项目】使用服务器部署MrDoc,一个支持跨平台、跨终端的在线文档、知识库管理程序
3.3K0
【实用的开源项目】使用服务器部署Whiteboard,一个轻量级、可轻松定制的协作白板
1.4K0
【实用的开源项目】使用服务器部署memos,一款拥有社交功能的、好看的自托管备忘录
3.8K0
【好玩儿的Docker项目】10分钟搭建一个高颜值的在线工具箱,用户体验很棒!
2.2K2
【好玩儿的Docker项目】2023重制版本!10分钟搭建一个专属的密码管理工具——Vaultwarden
2.2K0
【实用的开源项目】使用服务器部署Hoarder,一款集成AI且界面美观的书签管理器
1.5K2
【好玩儿的Docker项目】10分钟部署一个类似知乎的开源问答平台——Answer
3.8K0
【好玩儿的Docker项目】用腾讯云轻量应用服务器10分钟搭建一个轻量的视频分享网站——Fireshare
3.7K0
【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat
5K0
【实用的开源项目】使用服务器部署Audiobookshelf,一个自托管有声读物和播客服务器
5K1
【教程】使用腾讯云轻量应用服务器搭建Mirotalk,让自己拥有一个视频聊天平台!
3.4K0
相关推荐
【实用的开源项目】使用服务器部署Immich,高颜值高性能的自托管照片和视频备份方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档