iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue递归组件使用技巧实例代码分析
  • 554
分享到

Vue递归组件使用技巧实例代码分析

2023-07-05 09:07:15 554人浏览 泡泡鱼
摘要

这篇文章主要介绍“Vue递归组件使用技巧实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue递归组件使用技巧实例代码分析”文章能帮助大家解决问题。痛点引出在平时的开发当中,渲染侧边栏导航

这篇文章主要介绍“Vue递归组件使用技巧实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue递归组件使用技巧实例代码分析”文章能帮助大家解决问题。

痛点引出

在平时的开发当中,渲染侧边栏导航菜单有时会遇到过需要侧边栏有多层甚至无限层级的问题。此时更优雅的方式便是使用递归组件

Vue递归组件使用技巧实例代码分析

<el-menu>        <template slot="title">          <i class="el-icon-location"></i>          <span>菜单</span>        </template>        <el-submenu index="1-1">          <template slot="title">子菜单</template>          <el-menu-item index="1-1-1">子菜单选项1</el-menu-item>          <el-submenu index="1-1-2">              <template slot="title">子菜单的子菜单</template>            <el-menu-item index="1-1-2-1">子菜单的子菜单的选项1</el-menu-item>          </el-submenu>        </el-submenu>      </el-submenu></el-menu>

可以看到这部分重复的代码可以完全抽离出来做单独的组件。

<el-submenu>    <el-menu-item></el-menu-item>    ...</el-submenu>

那么问题来了,在一层当中又有重复的submenu怎么办?显然这个层级是需要动态生成的。比如:

<el-submenu>    <el-menu-item></el-menu-item>    ...    <el-submenu>        <el-menu-item></el-menu-item>        ...        <el-submenu>            <el-menu-item></el-menu-item>            ...            //这里省略很多很多层        </el-submenu>    </el-submenu></el-submenu>

很明显,这里需要可以用递归(recursive) 的思想来解决, 那么在template模版当中有办法做这样的组件吗?答案当然是可以,template模版语法也是支持递归。

源码中的体现

先找找源码,我们在src/core/global-api.ts当中找到initExtend函数,这个函数是initGlobalAPI的一个执行步骤,每个组件创建的时候都会去调用。

Vue递归组件使用技巧实例代码分析

可以看到如果命中name,则会给自己的components的配置项当中注册自己,使得可以在编译的时候可以识别到自己,从而在template模版语法当中去使用。

组件示例封装

首先定义数据结构能描述这样的菜单

[    {        id: '1',        title: '父菜单',        children:[            {id:'1-1',title:'子选项',children:[]},            {id:'1-1',title:'子菜单',children:[                {id:...,title:...,children:...},                ...            ]},            ...        ]    }]简单点描述就是interface item:{    id: string,    title: string,    children: item[] | []}item[]

然后开始封装组件

// RescursiveMenu.vue<template>    <el-submenu :index="menuItem.id" v-if="menuItem.children.length">        <template slot="title">{{ menuItem.title }}</template>            <template v-for="item in menuItem.children">                <RecursiveMenu :menuItem="item"/>            </template>    </el-submenu>    <el-menu-item v-else>{{ menuItem.title }}</el-menu-item></template><script>export default {    name:"RecursiveMenu",    props: {        menuItem: Object    }}</script>

当然这只是简单示例demo,后续根据业务需求相信难不倒各位看官。

使用:

<el-submenu>    <template v-for="item in menuList.children">       <RecursiveMenu :menuItem="item" :key="item.id"/>   </template></el-submenu>

小扩展

同样的,vue也支持jsx/tsx语法 ,使用jsx则需要抽象需要重复的过程,封装成渲染函数来实现递归,这里采用整个数组渲染过程抽象重复,来实现递归。

//MyMenu.jsxexport default {    name:"RecursiveMenu",    props: {        menuList: Array,        dafault:()=>([])    },    render(){        const recursiveRender = (menuList)=>{                return menuList.map((menuItem)=>{                        return menuItem.children.length > 0 ? (                            <elSubmenu index="{menuItem.id}">                            <div slot="title">{menuItem.title}</div>                            {recursiveRender(menuItem.children)}                            </elSubmenu>                            ):(                            <elMenuItem key="{menuItem.id}">{ menuItem.title }</elMenuItem>                        )                    }                )            }            return (<elMenu>                {recursiveRender(this.menuList)}                </elMenu>            )    }}

当然,如果想用jsx复刻上诉template当中抽象的逻辑,可以写成这样:

// RecursiveMenu.jsxexport default {    name:"RecursiveMenu",    props: {        menuItem: Object,        dafault:()=>({})    },    render(){        const recursiveRender = (menuItem)=>{            return menuItem.children.length > 0 ? (                <elSubmenu index="{menuItem.id}">                    <div slot="title">{menuItem.title}</div>                    {menuItem.children.map(children=>recursiveRender(children))}                </elSubmenu>            ):(                <elMenuItem key="{menuItem.id}">{ menuItem.title }</elMenuItem>            )        }        return recursiveRender(this.menuItem)    }}

关于“Vue递归组件使用技巧实例代码分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Vue递归组件使用技巧实例代码分析

本文链接: https://www.lsjlt.com/news/350854.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue递归组件使用技巧实例代码分析
    这篇文章主要介绍“Vue递归组件使用技巧实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue递归组件使用技巧实例代码分析”文章能帮助大家解决问题。痛点引出在平时的开发当中,渲染侧边栏导航...
    99+
    2023-07-05
  • Vue冷门技巧递归组件实践示例详解
    目录痛点引出源码中的体现组件示例封装小扩展总结痛点引出 在平时的开发当中,渲染侧边栏导航菜单有时会遇到过需要侧边栏有多层甚至无限层级的问题。此时更优雅的方式便是使用递归组件 &l...
    99+
    2023-03-06
    Vue 递归组件 Vue 组件
  • Vue开发技巧实例代码分析
    这篇文章主要讲解了“Vue开发技巧实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue开发技巧实例代码分析”吧!1.路由参数解耦通常在组件中使用路由参数,大多数人会做以下事情。e...
    99+
    2023-07-05
  • Vue实现递归组件的思路与示例代码
    目录前言一、递归组件是什么?二、Vue实现递归的核心思路三、代码示例1.父级2.子级3、实现效果补充:递归组件的应用场景总结前言 在我们开发过程中,为了提高开发效率,降低开发难度,我...
    99+
    2022-11-13
  • Vue使用技巧实例分析
    这篇文章主要介绍“Vue使用技巧实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue使用技巧实例分析”文章能帮助大家解决问题。1、将一个 prop 限制在一个类型的列表中我们在使用 prop...
    99+
    2023-06-29
  • Vue-Router使用实例代码分析
    本文小编为大家详细介绍“Vue-Router使用实例代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue-Router使用实例代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Vue-Router的...
    99+
    2023-07-04
  • Vue组件中使用防抖和节流实例分析
    在监听频繁触发的事件时,一定要多加小心,比如 用户在输入框打字、窗口大小调整、滚动、Intersection Observer 事件。 这些事件总是被频繁触发,可能 几秒一次。如果针...
    99+
    2022-11-12
  • 如何使用Vue代码实现一个分页组件
    本篇内容主要讲解“如何使用Vue代码实现一个分页组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Vue代码实现一个分页组件”吧!组件部分代码:Vue.component('zp...
    99+
    2023-07-04
  • 使用python对视频文件分辨率进行分组的实例代码
    在平时的工作中,我们的目录有很多的视频文件,如果你没有一个好的视频分类习惯,在找视频素材的时候会很费时,通过对视频的分辨路进行分类可以在需要的时候快速找到你想要的视频分辨率。当然人工...
    99+
    2022-11-12
  • vue中使用el-table组件checkbox进行分页多选,回显、切换分页记住上一页所勾选和取消的选项(示例代码)
    vue中使用el-table组件checkbox进行分页多选,回显、切换分页记住上一页所勾选和取消的选项 <template>     <el-dialog tit...
    99+
    2022-12-20
    vue el-table多页多选 翻页回显 vue el-table多选回显 vue el-table多选
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作