左侧菜单的渲染

方法一:嵌套着去写(这里只是涉及到三级)

<template>
    <template v-for="(item, index) in menuList" :key="index">
        <el-sub-menu v-if="item.children?.length" :index="item.path">
            <template #title>
                <el-icon>
                    <component :is="item.meta?.icon"></component>
                </el-icon>
                <span>{{ item.meta?.title }}
                </span>
            </template>
            <template v-for="(items, t) in item.children" :key="t">
                <el-sub-menu v-if="items.children?.length" :index="items.path">
                    <template #title>
                        <el-icon>
                            <component :is="items.meta?.icon"></component>
                        </el-icon>
                        <span>{{ items.meta?.title }}
                        </span>
                    </template>
                    <el-menu-item v-for="(it, ie) in items.children" :key="ie" :index="it.path">
                        <el-icon>
                            <component :is="it.meta?.icon"></component>
                        </el-icon>
                        <span>{{ it.meta?.title }}</span>
                    </el-menu-item>
                </el-sub-menu>
                <el-menu-item v-else :index="items.path">
                    <el-icon>
                        <component :is="items.meta?.icon"></component>
                    </el-icon>
                    <span>{{ items.meta?.title }}</span>
                </el-menu-item>
            </template>
        </el-sub-menu>
        <el-menu-item v-else :index="item.path">
            <el-icon>
                <component :is="item.meta?.icon"></component>
            </el-icon>
            <span>{{ item.meta?.title }}</span>
        </el-menu-item>
    </template>
</template>
<script lang="ts" setup>
defineProps(['menuList']);
</script>

方法二:递归的写法

1注册全局组件

import { createApp } from 'vue'


import App from './App.vue'
import router from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

import Menu from './components/menu/Menu.vue'

const app = createApp(App)

app.component('Menu', Menu)

app.use(router)
app.use(ElementPlus)
app.mount('#app')
<template>
  <template v-for="item in props.routes" :key="item.path">
    <template v-if="!item.children || item.children.length < 1">
      <el-menu-item :index="item.path">
        <el-icon>
          <component :is="item.meta?.icon" />
        </el-icon>
        <span>{{ item.meta?.title }}</span>
      </el-menu-item>
    </template>

    <el-sub-menu v-else :index="item.path">
      <template #title>
        <el-icon>
          <component :is="item.meta?.icon" />
        </el-icon>
        <span>{{ item.meta?.title }}</span>
      </template>
      <Menu :routes="item.children" />
    </el-sub-menu>
  </template>
</template>
<script setup lang="ts">

const props = defineProps(['routes'])
console.log(props.routes, '-----')



</script>

Uniapp是一款跨平台的开发框架,可以用于开发多个平台的应用。而左侧菜单栏是Uniapp中常见的一种界面布局。 Uniapp的左侧菜单栏通常位于应用的主界面左侧,用来展示应用的各个功能模块或页面,用户可以通过点击菜单栏上的选项,快速切换到相应的页面。 左侧菜单栏可以通过在页面中引入一个侧边栏组件来实现。在Uniapp中,可以使用uni-sidebar组件来创建一个左侧菜单栏。通过设置该组件的选项和监听事件,可以实现菜单栏的键值对、字体图标以及点击切换等功能。 在开发过程中,我们通常可以通过设置菜单栏的数据源来动态生成左侧菜单项。例如,可以使用一个包含菜单项的数组,通过v-for指令在组件中循环渲染菜单项。当用户点击某个菜单项时,可以通过监听菜单项的点击事件,执行相应的逻辑操作,如跳转到对应的页面或执行其他功能。 除了功能导航,左侧菜单栏还可以提供一些其他的交互功能,比如用户登出、修改个人信息等。这些功能可以在菜单栏的底部或其他位置添加相关选项,通过监听事件来实现相应的功能。 总而言之,Uniapp中的左侧菜单栏是一个非常常见的界面布局,可以方便用户在不同的功能页面之间进行切换,同时也可以提供一些其他的交互功能。通过灵活运用Uniapp的相关组件和事件来实现左侧菜单栏的功能,可以为应用的用户提供更好的使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值