当前位置:   article > 正文

点击侧边栏菜单时只切换 <router-view> 中的内容,而不是进行整个页面的路由跳转(动态路由)

点击侧边栏菜单时只切换 <router-view> 中的内容,而不是进行整个页面的路由跳转(动态路由)

解决方法:在 <el-menu> @select 事件中调用了 handleMenuSelect 方法来处理菜单项的选择。你可以在 handleMenuSelect 方法中根据菜单项的 index 来执行相应的操作,例如更新组件内的数据或者切换组件。由于整个页面的路由路径并没有改变,因此不会触发整个页面的路由跳转,只会更新 <router-view> 中的内容。这样就实现了只更新 <router-view> 中内容的效果。 

home组件

  1. <template>
  2. <div class="container">
  3. <el-container>
  4. <!-- 头部 -->
  5. <el-header>Header</el-header>
  6. <el-container>
  7. <!-- 侧边栏 -->
  8. <el-col :span="12" :style="{ 'width': '200px' }">
  9. <el-menu default-active="first" class="el-menu-vertical-demo" @select="handleMenuSelect">
  10. <el-menu-item index="first">
  11. <i class="el-icon-menu"></i>
  12. <span slot="title">首页</span>
  13. </el-menu-item>
  14. <el-menu-item index="person">
  15. <i class="el-icon-menu"></i>
  16. <span slot="title">个人中心</span>
  17. </el-menu-item>
  18. <el-menu-item index="personal">
  19. <i class="el-icon-document"></i>
  20. <span slot="title">成绩管理</span>
  21. </el-menu-item>
  22. <el-menu-item index="score">
  23. <i class="el-icon-setting"></i>
  24. <span slot="title">人员管理</span>
  25. </el-menu-item>
  26. </el-menu>
  27. </el-col>
  28. <!-- 主要内容 -->
  29. <el-main>
  30. <router-view></router-view>
  31. </el-main>
  32. </el-container>
  33. </el-container>
  34. </div>
  35. </template>
  36. <script>
  37. export default {
  38. methods: {
  39. handleMenuSelect(index) {
  40. const targetPath = '/' + index;
  41. // 判断目标路径是否与当前路径相同
  42. // 通过 this.$route.path 获取到当前路由的路径
  43. if (this.$route.path === targetPath) {
  44. // 如果相同则不进行导航
  45. return;
  46. }
  47. // 否则进行导航
  48. this.$router.push({ path: targetPath });
  49. }
  50. }
  51. };
  52. </script>
  53. <style scoped>
  54. .container {
  55. width: 1200px;
  56. margin: 0 auto;
  57. }
  58. .el-header {
  59. background-color: #B3C0D1;
  60. color: #333;
  61. text-align: center;
  62. line-height: 60px;
  63. }
  64. .el-aside {
  65. text-align: center;
  66. }
  67. .el-main {
  68. height: 600px;
  69. background-color: #E9EEF3;
  70. }
  71. body>.el-container {
  72. margin-bottom: 40px;
  73. }
  74. </style>

路由:

  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. Vue.use(VueRouter)
  4. import home from '@/view/home' //引入需要用的组件
  5. import login from '@/view/login' //引入需要用的组件
  6. import first from '@/view/aside/first'
  7. import person from '@/view/aside/person'
  8. import personal from '@/view/aside/personal'
  9. import score from '@/view/aside/score'
  10. const routes = [
  11. {
  12. path: '/',
  13. redirect: '/home' // 将根路径重定向到 home 路由
  14. },
  15. {
  16. path: '/home',//路由地址
  17. name: 'home',
  18. component: home,//相对应的组件
  19. redirect:{name:"first"},
  20. children:[
  21. {
  22. path: '/first',
  23. name: 'first',
  24. component: first
  25. },
  26. {
  27. path: '/person',
  28. name: 'person',
  29. component: person
  30. },
  31. {
  32. path: '/personal',
  33. name: 'personal',
  34. component: personal
  35. },
  36. {
  37. path: '/score',
  38. name: 'score',
  39. component: score
  40. }
  41. ]
  42. },
  43. {
  44. path: '/login',
  45. name: 'login',
  46. component: login
  47. }
  48. ]
  49. const router = new VueRouter({
  50. mode: 'history',
  51. base: process.env.BASE_URL,
  52. routes
  53. });
  54. export default router

目录

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/84767
推荐阅读
相关标签
  

闽ICP备14008679号