vue+element动态设置el-menu导航,刷新页面保持当前菜单选中项及路由

今天闲来无事整理了一套后台管理系统的侧边栏菜单,实现了页面刷新路由保持不变和菜单也是当前点击的高亮状态
来一起看看吧!
首先,菜单数据是动态的,注意的是 id 和 路由的 name保持一致,页面刷新要用到:
一级菜单不用name,因为没用到路由跳转

const menus = [
    { id: '0', label: '首页', path: '/', icon: 'fa fa-dashboard' },
    {
        id: '1',
        icon: 'fa fa-circle-o',
        label: '菜单1',
        submenu: [
            { id: 'addDoctor', name: 'addDoctor', label: '菜单1-1', icon: 'fa fa-hand-o-up' }
        ]
    },
    {
        id: '2',
        icon: 'fa fa-circle-o',
        label: '菜单2',
        submenu: [
            { id: 'doctorList', name: 'doctorList', label: '菜单2-2', icon: 'fa fa-hand-o-up' }
        ]
    },
    {
        id: '3',
        icon: 'fa fa-circle-o',
        label: '菜单3',
        submenu: [
            { id: 'updateApp', name: 'updateApp', label: '菜单3-3', icon: 'fa fa-hand-o-up' }
        ]
    }
]
export default menus

下面就是element的菜单结构啦,简单表示一下

<v-menu class="side-menu"
  :collapse="collapse"
  :default-active="defaultActive"
  :menus="menus"
  router    
  :background-color="theme.backgroundColor"
  :text-color="theme.textColor"
  :active-text-color="theme.activeTextColor"
  >
  //router  关键    是否使用 vue-router 的模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转
 <template v-for="item in menus">
    <template>
    <el-menu-item-group
      :title="typeof item[0] === 'string' ? item[0] : ''"
      >
      <el-menu-item
        v-for="val in item[1]"
        :key="val.id"
        :default-active="defaultActive"
        :index="val.id"  //这里的id就是上面数据的id
        :route="toRoute(val)"
        >
        <i v-if="val.icon" :class="val.icon"></i>
        <span slot="title">{{val.label}}</span>
      </el-menu-item>
    </el-menu-item-group>
    </template>
   </template>
   </v-menu>

好,关键的来了,看注释

 data () {
    return {
      menus,
      defaultActive: '0', //关键   当前激活菜单的 index
    }
  },
  watch: {
    $route () {
      this.setCurrentRoute()
    }
  },
  methods: {
    setCurrentRoute () {
      this.defaultActive = this.$route.name;//关键   通过他就可以监听到当前路由状态并激活当前菜单
    }
  },
  created () {
    this.setCurrentRoute()
  }

这就结束了,不了解的可以结合文档理解,我开始也是不知道怎么办网上找也没有和我这一模一样的,搞出来了就记录一下,希望对其他人有所帮助,在此记录。
每天进步一点点,加油!

element-ui的el-menu中,可以使用`router-link`来实现路由跳转,这样在切换路由时就可以保持当前选中菜单项。具体实现步骤如下: 1. 在el-menu中使用`router-link`组件来实现路由跳转,如下所示: ``` <el-menu default-active="1" class="el-menu-vertical-demo" router> <router-link to="/home"> <el-menu-item index="1"><i class="el-icon-menu"></i>首页</el-menu-item> </router-link> <router-link to="/about"> <el-menu-item index="2"><i class="el-icon-menu"></i>关于我们</el-menu-item> </router-link> <router-link to="/contact"> <el-menu-item index="3"><i class="el-icon-menu"></i>联系我们</el-menu-item> </router-link> </el-menu> ``` 2. 使用Vue Router的`router-link-active`指令来自动设置菜单项的选中状态,如下所示: ``` <el-menu default-active="1" class="el-menu-vertical-demo" router> <router-link to="/home" router-link-active="active"> <el-menu-item index="1"><i class="el-icon-menu"></i>首页</el-menu-item> </router-link> <router-link to="/about" router-link-active="active"> <el-menu-item index="2"><i class="el-icon-menu"></i>关于我们</el-menu-item> </router-link> <router-link to="/contact" router-link-active="active"> <el-menu-item index="3"><i class="el-icon-menu"></i>联系我们</el-menu-item> </router-link> </el-menu> ``` 3. 在样式中定义`.active`类来设置选中状态的样式,如下所示: ``` .active { background-color: #409EFF !important; color: #fff !important; } ``` 这样就可以实现在el-menu保持当前选中菜单项,并在切换路由时自动更新选中状态。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值