發(fā)布時間:2024-03-07 11:51:56 瀏覽量:212次
在vue中正常寫死的使用 el-menu 組件是沒有問題的。但是如果數據是動態(tài)的時候,并且菜單數據的層級嵌套的也不知道。這個時候在使用該組件時就會遇到一個問題。
<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組件則渲染的是當前節(jié)點的子級數據。然而在你根本不知道數據哪一個節(jié)點會出現子級數據時,在template中就無法使用類似v-for這樣的循環(huán)來渲染數據。
此時就想了,能不能在el-menu-item外面嵌套一層標簽,如果我們發(fā)現數據又子級數據,就讓這個數據使用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>
熱門資訊
1. iPhone6的UI設計尺寸規(guī)范,原來如此重要!
想要了解iPhone6界面設計的尺寸規(guī)范嗎?這里為您詳細介紹iPhone6的UI設計尺寸規(guī)范,包括界面尺寸、圖標尺寸、可點擊高度規(guī)范、搜索欄高度規(guī)范以及界面元素之間的距離規(guī)范。
2. 12個絕佳的UI設計網站,助力你的創(chuàng)作之旅!
將為大家介紹12個絕佳的UI設計網站,這些網站不僅可以為你提供靈感,還可以幫助你學習新的技巧,助力你的創(chuàng)意之旅!dribbbleDribbble 是一個面向設計師的...
3. 移動端UI設計中常見的5種APP界面類型,你get到了嗎?
通過介紹移動端UI設計中的閃屏頁、引導頁、浮層引導頁、空白頁和首頁等5種APP界面類型,幫助大家更好地了解UI設計的基本知識
怎樣可以提升你的UI設計能力!第一個:站酷站酷想必是設計師都知道的一個網站,里面不止有UI設計的資源,還有其他設計的,不如:平面設計、網頁設計、字體...
在移動端設計中,列表頁和表單頁是不可或缺的部分。一個好的列表頁和表單頁設計能夠讓用戶輕松地獲取信息并產生點擊欲望,從而提高點擊率。本文將為你...
對于想要提高自己的設計能力和創(chuàng)造力的小白和UI設計師來說,這本書是一個很好的選擇。4.《設計的覺醒》(IKKO TANAKA)推薦理由: 這本書是日本現代平面...
探索零基礎UI設計培訓的時長與薪資前景。了解數字藝術教育領域的專業(yè)課程,以及培訓后的職業(yè)發(fā)展機會。
8. 物聯(lián)網APP UI設計:創(chuàng)造智能硬件領域的沉浸式體驗
ui設計應該讓用戶一目了然,能夠快速找到所需的信息和功能。在設計過程中,應盡量使用簡潔的圖標、文字和色彩,避免過多的視覺干擾。符合用戶習慣:ui設...
想了解武漢UI設計培訓班的費用是多少嗎?不知道學UI設計要花多少錢?不妨看看這篇文章,了解UI設計培訓班的學費價格以及學習內容。
10. 設計中的色彩心理學:淺析中西方色彩的歷史演變與設計應用
摘要:本文探討了色彩的歷史演變和設計應用。通過對色彩在早期文明社會中的實用運用、不同文化背景下色彩觀念的差異、色彩在設計中的重要性以及新興技...
同學您好!