发布时间:2024-03-07 11:51:56 浏览量:215次
在vue中正常写死的使用 el-menu 组件是没有问题的。但是如果数据是动态的时候,并且菜单数据的层级嵌套的也不知道。这个时候在使用该组件时就会遇到一个问题。
<el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect">
<el-menu-item index="1">处理中心</el-menu-item>
<el-submenu index="2">
<template slot="title">我的工作台</template>
<el-menu-item index="2-1">选项1</el-menu-item>
<el-menu-item index="2-2">选项2</el-menu-item>
<el-menu-item index="2-3">选项3</el-menu-item>
<el-submenu index="2-4">
<template slot="title">选项4</template>
<el-menu-item index="2-4-1">选项1</el-menu-item>
<el-menu-item index="2-4-2">选项2</el-menu-item>
<el-menu-item index="2-4-3">选项3</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="3" disabled>消息中心</el-menu-item>
<el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item>
</el-menu>
如上面这一段代码,在与el-menu-item组件同级的还有el-submenu组件,而el-submenu组件则渲染的是当前节点的子级数据。然而在你根本不知道数据哪一个节点会出现子级数据时,在template中就无法使用类似v-for这样的循环来渲染数据。
此时就想了,能不能在el-menu-item外面嵌套一层标签,如果我们发现数据又子级数据,就让这个数据使用el-submenu组件。乍听上去好像可行,然而是不行的,最起码数据嵌套多少层你不知道,也就不知道需要预设写多少层。
此时又来灵感了,把el-submenu封装一层,在封装的组件里面再使用这个封装的组件,这样就会形成一个递归的效果,也就解决了层级嵌套的问题。
设想很美好,然而事实并不然,这套组件之间根本容不下其他任何组件或标签
其实想要的效果就是根据数据,在该渲染el-menu-item的地方渲染el-menu-item,在该渲染el-submenu的地方渲染el-submenu。如果这标签是一堆字符串的话,我们使用一个函数的编写方式不就可以解决所有的问题?有的,其实是vue里面的老api了。使用render函数来解决这个问题。
export default {
props: {
menuData: {
type: Array,
default: () => ([])
}
},
render() {
const menuItem = (item, index) => {
const renderName = (item.children && item.children.length) ? 'submenu' : 'menuItem'
const jx = {
submenu: (function() {
return (
<el-submenu index={String(index)}>
<template slot='title'>
<img class='menu-m-icon' src={item.iconPath} style={imgStyle} />
{item.name}
</template>
{
listFn(item.children).map((t, i) => menuItem(t, `${index}-${i}`))
}
</el-submenu>
)
})(),
menuItem: (
<el-menu-item index={String(index)}>
{ item.name }
</el-menu-item>
)
}
return jx[renderName]
}
return (
<el-menu>
{this.menuData.map((t, index) => menuItem(t, index))}
</el-menu>
)
}
}
<template>
<menu : menuData="menuData"></menu>
</template>
<script>
import menu from './menu'
export default {
components: { menu },
data() {
return {
menuData: [
{ name: '项目一', id: 1 },
{ name: '项目二', id: 2, children: [
{ name: '项目2-1' },
{ name: '项目2-2', children: [
{ name: '项目2-2-1' }
]}
] },
{ name: '项目三', id: 3 },
]
}
}
}
</script>
热门资讯
想要了解iPhone6界面设计的尺寸规范吗?这里为您详细介绍iPhone6的UI设计尺寸规范,包括界面尺寸、图标尺寸、可点击高度规范、搜索栏高度规范以及界面元素之间的距离规范。
将为大家介绍12个绝佳的UI设计网站,这些网站不仅可以为你提供灵感,还可以帮助你学习新的技巧,助力你的创意之旅!dribbbleDribbble 是一个面向设计师的...
3. 移动端UI设计中常见的5种APP界面类型,你get到了吗?
通过介绍移动端UI设计中的闪屏页、引导页、浮层引导页、空白页和首页等5种APP界面类型,帮助大家更好地了解UI设计的基本知识
怎样可以提升你的UI设计能力!第一个:站酷站酷想必是设计师都知道的一个网站,里面不止有UI设计的资源,还有其他设计的,不如:平面设计、网页设计、字体...
在移动端设计中,列表页和表单页是不可或缺的部分。一个好的列表页和表单页设计能够让用户轻松地获取信息并产生点击欲望,从而提高点击率。本文将为你...
对于想要提高自己的设计能力和创造力的小白和UI设计师来说,这本书是一个很好的选择。4.《设计的觉醒》(IKKO TANAKA)推荐理由: 这本书是日本现代平面...
探索零基础UI设计培训的时长与薪资前景。了解数字艺术教育领域的专业课程,以及培训后的职业发展机会。
ui设计应该让用户一目了然,能够快速找到所需的信息和功能。在设计过程中,应尽量使用简洁的图标、文字和色彩,避免过多的视觉干扰。符合用户习惯:ui设...
想了解武汉UI设计培训班的费用是多少吗?不知道学UI设计要花多少钱?不妨看看这篇文章,了解UI设计培训班的学费价格以及学习内容。
10. 设计中的色彩心理学:浅析中西方色彩的历史演变与设计应用
摘要:本文探讨了色彩的历史演变和设计应用。通过对色彩在早期文明社会中的实用运用、不同文化背景下色彩观念的差异、色彩在设计中的重要性以及新兴技...
同学您好!