vue 实现动态渲染菜单

在很多情况下我们的菜单是写死的,然后通过路由路径跳转到所对应的页面,类似于这样的。

下面是普通的一级菜单和二级菜单的写法:

//一级菜单
<el-menu-item index="1" route="/evaluateStudents"
  data-intro="【首页】 >&nbsp;&nbsp;首页</el-menu-item
>
//二级菜单
<el-sub-menu index="2" data-intro="【发布通知】" data-step="3">
<template v-slot:title>发布通知</template>
    <el-menu-item index="2-1" route="/Notice">通知</el-menu-item>
    <el-menu-item index="2-2" route="/Survey">问卷</el-menu-item>
    <el-menu-item index="2-3" route="/HisNotice">历史通知</el-menu-item
 >
</el-sub-menu>

现在新的需求是,一级菜单和二级菜单都需要动态生成,根据后台给的数据生成动态菜单。

接口格式数据:

实现代码:

:index可以读取url里面的路由来实现跳转。

二级菜单可以通过v-if判断里面是否有数据来决定是否显示。

里面的对应菜单数据就需要前端去判断获取了。

//动态一级菜单
<template v-for="(menus, index) in menulist" :key="index">
   <el-menu-item :index="menus.url">{{ menus.detail }}</el-menu-item>
</template>

//动态二级菜单
<el-sub-menu v-if="noticeshow" index="1" data-intro="【发布通知】" data-step="3">
    <template v-slot:title>发布通知</template>
    <template v-for="(menus, index) in noticelist" :key="index" >
        <el-menu-item :index="menus.url">{{ menus.detail }}</el-menu-item>
    </template>
</el-sub-menu>

此外还有一种特殊情况,原本使用a链接去跳转的菜单,并不是使用路由跳转。

<el-menu-item route="/evaluateStudents">
       <a target="_blank" class="cardUrl" :href="www.baidu.com" data-step="11">电子班牌</a>
</el-menu-item>

这种情况我们要做动态菜单,我们只要获取数据里的detail,也就是获取菜单的名字,并不需要url(可以为空),因为我们已经有链接跳转。

<template v-for="(menus, index) in electronicclasslist" :key="index">
      <el-menu-item :index="menus.url"><a target="_blank" class="cardUrl" :href="www.baidu.com" data-step="11">
       {{ menus.detail }}</a>
      </el-menu-item>
</template>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现左侧动态菜单栏,可以使用 Vue Router 和 Vue动态组件。首先在路由配置中定义好菜单项和对应的路由,然后在菜单组件中通过 v-for 循环渲染菜单项,并通过 router-link 组件实现路由跳转。同时,可以通过监听路由变化,动态设置当前选中的菜单项样式。 具体实现步骤如下: 1. 在路由配置中定义好菜单项和对应的路由: ```javascript const routes = [ { path: '/', component: Home, children: [ { path: 'dashboard', component: Dashboard, meta: { title: 'Dashboard' } }, { path: 'user', component: User, meta: { title: 'User' } }, { path: 'role', component: Role, meta: { title: 'Role' } } ] } ] ``` 2. 在菜单组件中通过 v-for 循环渲染菜单项,并通过 router-link 组件实现路由跳转: ```html <template> <div class="menu"> <ul> <li v-for="(item, index) in menuList" :key="index" :class="{ active: item.active }"> <router-link :to="{ path: item.path }">{{ item.meta.title }}</router-link> </li> </ul> </div> </template> <script> export default { data() { return { menuList: [] } }, created() { this.menuList = this.$router.options.routes[0].children this.setActiveMenu() }, methods: { setActiveMenu() { const currentPath = this.$route.path this.menuList.forEach(item => { item.active = item.path === currentPath }) } }, watch: { $route() { this.setActiveMenu() } } } </script> ``` 3. 在菜单组件中监听路由变化,动态设置当前选中的菜单项样式: ```css .menu li.active { background-color: #f0f0f0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值