Vue嵌套路由(三层)

Bertha 。 2022-04-10 11:18 918阅读 0赞

小编推荐:Fundebug专注于JavaScript、微信小程序、微信小游戏,Node.js和Java实时BUG监控。真的是一个很好用的bug监控费服务,众多大佬公司都在使用。

Vue嵌套路由:
实现效果(路由三层嵌套,点击一级tab显示二级tab效果,二级tab点击切换对应内容,不在tab区域里的内容,切换时不重复渲染):

Demo访问时路径:http://IP:端口/#/routers/

![Image 1][]

image.png

1.建立案例文件夹 page/routers/

![Image 1][]

image.png

1 routers/index.vue

  1. <template>
  2. <div>
  3. <router-link :to="{name: 'rindex_rhome'}" class="rlink" :class="{active:selected == 1}" @click.native="tabck(1)">首页</router-link>
  4. <router-link :to="{name: 'rindex_rnews'}" class="rlink" class="{active:selected == 2}" @click.native="tabck(2)">新闻</router-link>
  5. <router-link :to="{name: 'rindex_ryl'}" class="rlink" class="{active:selected == 3}" @click.native="tabck(3)">娱乐</router-link>
  6. <!-- 二级子路由页面 -->
  7. <router-view />
  8. </div>
  9. </template>
  10. <script>
  11. export default {
  12. data(){
  13. return {
  14. selected: 1
  15. }
  16. },
  17. methods: {
  18. tabck(index){
  19. this.selected = index; //设置tab选中项
  20. }
  21. }
  22. }
  23. </script>
  24. <style>
  25. .rlink {
  26. padding: 5px;
  27. margin: 5px;
  28. margin-bottom: 10px;
  29. display: inline-block;
  30. text-decoration: none;
  31. color: blue;
  32. }
  33. .rlink.active {
  34. color: red;
  35. text-decoration: underline;
  36. }
  37. </style>

1-1-1 routers/home/index.vue

  1. <template>
  2. <div>
  3. HOME页面信息:<br/>
  4. <router-link :to="{name: 'rindex_rhome_Rhomezx'}" class="rlink" :class="{active:selected == 1}" @click.native="tabck(1)">最新HOME</router-link>
  5. <router-link :to="{name: 'rindex_rhome_Rhomegj'}" class="rlink" :class="{active:selected == 2}" @click.native="tabck(2)">国际HOME</router-link>
  6. <router-link :to="{name: 'rindex_rhome_Rhomegn'}" class="rlink" :class="{active:selected == 3}" @click.native="tabck(3)">国内HOME</router-link>
  7. <!-- 子路由(三层) -->
  8. <router-view />
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. data(){
  14. return {
  15. selected: 1
  16. }
  17. },
  18. methods: {
  19. tabck(index) {
  20. this.selected = index; //设置选中tab
  21. }
  22. }
  23. }
  24. </script>
  25. <style>
  26. </style>

1-1-2 routers/home/tab/gj.vue、gn.vue、zx.vue

  1. gj.vue
  2. <template>
  3. <div>
  4. 国际HOME信息:<br/>
  5. <ul >
  6. <li v-for="(result, index) in list" :key="index">{
  7. {result.name}}{
  8. {index}}</li>
  9. </ul>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data(){
  15. return {
  16. list: [
  17. {name:'国际HOME'},
  18. {name:'国际HOME'},
  19. {name:'国际HOME'}
  20. ]
  21. }
  22. }
  23. }
  24. </script>
  25. gn.vue :
  26. <template>
  27. <div>
  28. 国内HOME信息:<br/>
  29. <ul >
  30. <li v-for="(result, index) in list" :key="index">{
  31. {result.name}}{
  32. {index}}</li>
  33. </ul>
  34. </div>
  35. </template>
  36. <script>
  37. export default {
  38. data(){
  39. return {
  40. list: [
  41. {name:'国内HOME'},
  42. {name:'国内HOME'}
  43. ]
  44. }
  45. }
  46. }
  47. </script>
  48. zx.vue
  49. <template>
  50. <div>
  51. 最新HOME信息:<br/>
  52. <ul >
  53. <li v-for="(result, index) in list" :key="index">{
  54. {result.name}}{
  55. {index}}</li>
  56. </ul>
  57. </div>
  58. </template>
  59. <script>
  60. export default {
  61. data(){
  62. return {
  63. list: [
  64. {name:'最新HOME'}
  65. ]
  66. }
  67. }
  68. }
  69. </script>

1-2 routers/news/index.vue

  1. <template>
  2. <div>
  3. 新闻页面信息:<br/>
  4. <router-link class="rlink" :class="{active:selected == 1}" @cllick.native="tabck(1)">最新新闻</router-link>
  5. <router-link class="rlink" :class="{active:selected == 2}" @cllick.native="tabck(2)">国际新闻</router-link>
  6. <router-link class="rlink" :class="{active:selected == 3}" @cllick.native="tabck(3)">国内新闻</router-link>
  7. <!-- 子路由 -->
  8. <router-view/>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. data () {
  14. return {
  15. selected: 1
  16. }
  17. },
  18. methods: {
  19. tabck(index){
  20. this.selected = index; //切换tab,设置选中项
  21. }
  22. }
  23. }
  24. </script>

1-2-1 routers/news/tab/gj.vue、gn.vue、zx.vue

  1. gj.vue
  2. <template>
  3. <div>
  4. 国际新闻信息:<br/>
  5. <ul >
  6. <li v-for="(result, index) in list" :key="index">{
  7. {result.name}}{
  8. {index}}</li>
  9. </ul>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data(){
  15. return {
  16. list: [
  17. {name:'国际新闻信息'},
  18. {name:'国际新闻信息'},
  19. {name:'国际新闻信息'},
  20. {name:'国际新闻信息'},
  21. {name:'国际新闻信息'}
  22. ]
  23. }
  24. }
  25. }
  26. </script>
  27. gn.vue
  28. <template>
  29. <div>
  30. 国内新闻信息:<br/>
  31. <ul >
  32. <li v-for="(result, index) in list" :key="index">{
  33. {result.name}}{
  34. {index}}</li>
  35. </ul>
  36. </div>
  37. </template>
  38. <script>
  39. export default {
  40. data(){
  41. return {
  42. list: [
  43. {name:'国内新闻信息'},
  44. {name:'国内新闻信息'}
  45. ]
  46. }
  47. }
  48. }
  49. </script>
  50. zx.vue
  51. <template>
  52. <div>
  53. 最新新闻信息:<br/>
  54. <ul >
  55. <li v-for="(result, index) in list" :key="index">{
  56. {result.name}}{
  57. {index}}</li>
  58. </ul>
  59. </div>
  60. </template>
  61. <script>
  62. export default {
  63. data(){
  64. return {
  65. list: [
  66. {name:'最新新闻信息'},
  67. {name:'最新新闻信息'}
  68. ]
  69. }
  70. }
  71. }
  72. </script>

1-3-1 routers/yl/index.vue

  1. <template>
  2. <div>
  3. 娱乐页面信息:<br/>
  4. <router-link class="rlink" :class="{active:selected == 1}" @click.native="tabck(1)">最新娱乐</router-link>
  5. <router-link class="rlink" :class="{active:selected == 2}" @click.native="tabck(2)">明星娱乐</router-link>
  6. <router-link class="rlink" :class="{active:selected == 3}" @click.native="tabck(3)">焦点娱乐</router-link>
  7. <!-- 子路由-->
  8. <router-view/>
  9. </div>
  10. <script>
  11. export default {
  12. data(){
  13. return {
  14. selected: 1
  15. }
  16. },
  17. methods: {
  18. tabck(index){
  19. this.selected = index; //设置tab选中项
  20. }
  21. }
  22. }
  23. </script>
  24. </template>

1-3-2 routers/yl/tab/jd.vue、mx.vue、zx.vue

  1. jd.vue
  2. <template>
  3. <div>
  4. 焦点娱乐信息:<br/>
  5. <ul >
  6. <li v-for="(result, index) in list" :key="index">{
  7. {result.name}}{
  8. {index}}</li>
  9. </ul>
  10. </div>
  11. </template>
  12. <script>
  13. export default {
  14. data(){
  15. return {
  16. list: [
  17. {name:'焦点娱乐信息'},
  18. {name:'焦点娱乐信息'}
  19. ]
  20. }
  21. }
  22. }
  23. </script>
  24. mx.vue
  25. <template>
  26. <div>
  27. 明星娱乐信息:<br/>
  28. <ul >
  29. <li v-for="(result, index) in list" :key="index">{
  30. {result.name}}{
  31. {index}}</li>
  32. </ul>
  33. </div>
  34. </template>
  35. <script>
  36. export default {
  37. data(){
  38. return {
  39. list: [
  40. {name:'明星娱乐信息'},
  41. {name:'明星娱乐信息'}
  42. ]
  43. }
  44. }
  45. }
  46. </script>
  47. zx.vue
  48. <template>
  49. <div>
  50. 最新娱乐信息:<br/>
  51. <ul >
  52. <li v-for="(result, index) in list" :key="index">{
  53. {result.name}}{
  54. {index}}</li>
  55. </ul>
  56. </div>
  57. </template>
  58. <script>
  59. export default {
  60. data(){
  61. return {
  62. list: [
  63. {name:'最新娱乐信息'},
  64. {name:'最新娱乐信息'}
  65. ]
  66. }
  67. }
  68. }
  69. </script>

2.路由配置规则(router/index.js)

  1. ....
  2. 省略导入路由、使用路由代码...
  3. ....
  4. // 嵌套路由的使用:第一层
  5. import Rindex from '../page/routers/index'
  6. // 嵌套路由的使用:第二层
  7. import Rhome from '../page/routers/home/index'
  8. // 嵌套路由的使用:第三层
  9. import Rhomezx from '../page/routers/home/tab/zx'
  10. import Rhomegj from '../page/routers/home/tab/gj'
  11. import Rhomegn from '../page/routers/home/tab/gn'
  12. import Rnews from '../page/routers/news/index'
  13. import Rnewszx from '../page/routers/news/tab/zx'
  14. import Rnewsgj from '../page/routers/news/tab/gj'
  15. import Rnewsgn from '../page/routers/news/tab/gn'
  16. import Ryl from '../page/routers/yl/index'
  17. import Rylzx from '../page/routers/yl/tab/zx'
  18. import Rylmx from '../page/routers/yl/tab/mx'
  19. import Ryljd from '../page/routers/yl/tab/jd'
  20. // 路由规则配置:
  21. export default new Router({
  22. routes : [
  23. {
  24. name: 'rindex',
  25. path: '/routers',
  26. component: Rindex,
  27. redirect: {name: 'rindex_rhome'}, // 跳转到下一级第一个
  28. children: [
  29. {
  30. name: 'rindex_rhome',
  31. path: 'rindex_rhome', //如果这里不使用 "/rhome" 则表示是归属于上级路由(上级luyou/子path),如果使用 "/rhome" 则表示根路径下访问
  32. component: Rhome,
  33. redirect: {name: 'rindex_rhome_Rhomezx'}, //跳转到下级第一层
  34. children: [
  35. {
  36. name: 'rindex_rhome_Rhomezx',
  37. path: 'rindex_rhome_Rhomezx',
  38. component: Rhomezx
  39. },
  40. {
  41. name: 'rindex_rhome_Rhomegj',
  42. path: 'rindex_rhome_Rhomegj',
  43. component: Rhomegj
  44. },
  45. {
  46. name: 'rindex_rhome_Rhomegn',
  47. path: 'rindex_rhome_Rhomegn',
  48. component: Rhomegn
  49. }
  50. ]
  51. },
  52. {
  53. name: 'rindex_rnews',
  54. path: 'rindex_rnews',
  55. component: Rnews,
  56. redirect: {name: 'rindex_rnews_Rnewszx'},
  57. children: [
  58. {
  59. name: 'rindex_rnews_Rnewszx',
  60. path: 'rindex_rnews_Rnewszx',
  61. component: Rnewszx
  62. },
  63. {
  64. name: 'rindex_rnews_Rnewsgj',
  65. path: 'rindex_rnews_Rnewsgj',
  66. component: Rnewsgj
  67. },
  68. {
  69. name: 'rindex_rnews_Rnewsgn',
  70. path: 'rindex_rnews_Rnewsgn',
  71. component: Rnewsgn
  72. }
  73. ]
  74. },
  75. {
  76. name: 'rindex_ryl',
  77. path: 'rindex_ryl',
  78. component: Ryl,
  79. redirect: {name: 'rindex_ryl_rylzx'},
  80. chidren:[
  81. {
  82. name: 'rindex_ryl_rylzx',
  83. path: 'rindex_ryl_rylzx',
  84. component: Rylzx
  85. },
  86. {
  87. name: 'rindex_ryl_rylmx',
  88. path: 'rindex_ryl_rylmx',
  89. component: Rylmx
  90. },
  91. {
  92. name: 'rindex_ryl_ryljd',
  93. path: 'rindex_ryl_ryljd',
  94. component: Ryljd
  95. }
  96. ]
  97. }
  98. ]
  99. }
  100. ]
  101. });

作者:圆梦人生
链接:https://www.jianshu.com/p/e1932903cfca

关于Fundebug

Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了9亿+错误事件,得到了Google、360、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!

2018121912254161

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,918人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Vue 嵌套

    文章目录 嵌套路由 具体实现 嵌套路由 说白了就是选项卡中又嵌套一个选项卡。 可以看看官方的例子 [传送门][Link 1] 具体

    相关 Vue嵌套(子

    路由的嵌套就是点击一个路由地址后,继续点击,进入到另外一个路由地址下,即第二个路由就是第一个路由的子路由。 根据我们前面学习的VueRouter的知识,可以直接写出代码来实

    相关 Vue嵌套()

    > 小编推荐:[Fundebug][]专注于JavaScript、微信小程序、微信小游戏,Node.js和Java实时BUG监控。真的是一个很好用的bug监控费服务,众多大佬公