vue传值Vue.js专区小知识

vue导航菜单状态保存解决方案

2018-02-06  本文已影响627人  HJaycee

通过在点击事件和路由钩子中将将要前往的页面索引保存到vueX中,并且该状态绑定到导航菜单上。

<el-menu :default-openeds="['1','2']" :default-active="menuIndex">
  <el-submenu index="1">
    <template slot="title">菜单</template>
    <el-menu-item-group>
      <el-menu-item index="0-0" @click="onMenuChange('feedback')">留言</el-menu-item>
      <el-menu-item index="0-1" @click="onMenuChange('feedbacklist')">留言列表</el-menu-item>
    </el-menu-item-group>
  </el-submenu>
  <el-submenu index="2">
    <template slot="title">运营管理</template>
    <el-menu-item-group>
      <el-menu-item index="1-0" @click="onMenuChange('notice')">闪屏公告</el-menu-item>
    </el-menu-item-group>
    <el-menu-item-group>
      <el-menu-item index="1-1" @click="onMenuChange('update')">版本更新</el-menu-item>
    </el-menu-item-group>=
  </el-submenu>
</el-menu>
onMenuChange (page, fromHook) { // 菜单状态缓存
  const indexs = [
    {
      'index': '0-0',
      'pages': ['feedback']
    },
    {
      'index': '0-1',
      'pages': ['feedbacklist']
    },
    {
      'index': '1-0',
      'pages': ['notice', 'addNotice']
    },
    {
      'index': '1-1',
      'pages': ['update']
    }
  ]

  for (var i = 0; i < indexs.length; i++) {
    const dic = indexs[i]
    if (common.isInArray(dic['pages'], page)) {
      this.$store.commit('changeMenuIndex', dic['index'])
      break
    }
  }

  if (!fromHook) {
    this.$router.push({
      name: page
    })
  }
}
this.$router.beforeResolve((to, from, next) => {
  next()
  this.onMenuChange(to.name, true)
})
this.$router.afterEach((to, from) => {
  this.onMenuChange(to.name, true)
})
beforeRouteEnter: (to, from, next) => {
  next(vm => {
    vm.onMenuChange(to.name, true)
  })
}
export const store = new Vuex.Store({
  state: {
    menuIndex: ''
  },
  mutations: {
    changeMenuIndex: (state, arg) => {
      state.menuIndex = arg
    }
  }
})

有疑问的请看demo

上一篇 下一篇

猜你喜欢

热点阅读