12.Vue嵌套路由(三层)

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

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

image.png

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

image.png

1 routers/index.vue

<template>
  <div>
      <router-link :to="{name: 'rindex_rhome'}" class="rlink" :class="{active:selected == 1}" @click.native="tabck(1)">首页</router-link>
      <router-link :to="{name: 'rindex_rnews'}" class="rlink" class="{active:selected == 2}" @click.native="tabck(2)">新闻</router-link>
      <router-link :to="{name: 'rindex_ryl'}" class="rlink" class="{active:selected == 3}" @click.native="tabck(3)">娱乐</router-link>
    
       <!-- 二级子路由页面 -->
        <router-view />
  </div>
</template>
<script>
export default {
  data(){
    return {
          selected: 1
    }
  },
  methods: {
    tabck(index){
        this.selected = index; //设置tab选中项
    }
  }
}
</script>
<style>
  .rlink {
    padding: 5px;
    margin: 5px;
    margin-bottom: 10px;
    display: inline-block;
    text-decoration: none;
    color: blue;
  }

  .rlink.active {
    color: red;
    text-decoration: underline;
  }
</style>

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

<template>
  <div>
      HOME页面信息:<br/>
      <router-link :to="{name: 'rindex_rhome_Rhomezx'}" class="rlink" :class="{active:selected == 1}" @click.native="tabck(1)">最新HOME</router-link>
      <router-link :to="{name: 'rindex_rhome_Rhomegj'}" class="rlink" :class="{active:selected == 2}" @click.native="tabck(2)">国际HOME</router-link>
      <router-link :to="{name: 'rindex_rhome_Rhomegn'}" class="rlink" :class="{active:selected == 3}" @click.native="tabck(3)">国内HOME</router-link>
    
    <!-- 子路由(三层) -->
      <router-view />
  </div>
</template>
<script>
  export default {
    data(){
        return {
            selected: 1
        }
    },
    methods: {
      tabck(index) {
         this.selected = index; //设置选中tab
      }
    }
  }
</script>
<style>
</style>

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

gj.vue:

<template>
  <div>
        国际HOME信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'国际HOME'},
            {name:'国际HOME'},
            {name:'国际HOME'}
          ]
      }
    }
  }
</script>


gn.vue :

<template>
  <div>
        国内HOME信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'国内HOME'},
            {name:'国内HOME'}
          ]
      }
    }
  }
</script>

zx.vue:

<template>
  <div>
        最新HOME信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'最新HOME'}
          ]
      }
    }
  }
</script>

1-2 routers/news/index.vue

<template>
  <div>
       新闻页面信息:<br/>
        <router-link class="rlink" :class="{active:selected == 1}" @cllick.native="tabck(1)">最新新闻</router-link>
        <router-link class="rlink" :class="{active:selected == 2}" @cllick.native="tabck(2)">国际新闻</router-link>
        <router-link class="rlink" :class="{active:selected == 3}" @cllick.native="tabck(3)">国内新闻</router-link>
    <!-- 子路由 -->
    <router-view/>
  </div>
</template>
<script>
  export default {
    data () {
      return {
          selected: 1
      }
    },
    methods: {
      tabck(index){
        this.selected = index; //切换tab,设置选中项
      }
    } 
  }
</script>

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

gj.vue:

<template>
  <div>
        国际新闻信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'国际新闻信息'},
            {name:'国际新闻信息'},
            {name:'国际新闻信息'},
            {name:'国际新闻信息'},
            {name:'国际新闻信息'}
          ]
      }
    }
  }
</script>

gn.vue:

<template>
  <div>
        国内新闻信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'国内新闻信息'},
            {name:'国内新闻信息'}
          ]
      }
    }
  }
</script>

zx.vue:

<template>
  <div>
        最新新闻信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'最新新闻信息'},
            {name:'最新新闻信息'}
          ]
      }
    }
  }
</script>

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

<template>
  <div>
        娱乐页面信息:<br/>
        <router-link class="rlink" :class="{active:selected == 1}" @click.native="tabck(1)">最新娱乐</router-link>
        <router-link class="rlink" :class="{active:selected == 2}" @click.native="tabck(2)">明星娱乐</router-link>
        <router-link class="rlink" :class="{active:selected == 3}" @click.native="tabck(3)">焦点娱乐</router-link>
      
        <!-- 子路由-->
        <router-view/>
  </div>
  <script>
    export default {
      data(){
        return {
          selected: 1
        }
      },
      methods: {
        tabck(index){
          this.selected = index; //设置tab选中项
        }
      }
    }
  </script>
</template>

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

jd.vue:
<template>
  <div>
        焦点娱乐信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'焦点娱乐信息'},
            {name:'焦点娱乐信息'}
          ]
      }
    }
  }
</script>

mx.vue:

<template>
  <div>
        明星娱乐信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'明星娱乐信息'},
            {name:'明星娱乐信息'}
          ]
      }
    }
  }
</script>

zx.vue:

<template>
  <div>
        最新娱乐信息:<br/>
         <ul >
             <li v-for="(result, index) in list" :key="index">{{result.name}}{{index}}</li>
         </ul>
  </div>
</template>
<script>
  export default {
    data(){
      return {
          list: [
            {name:'最新娱乐信息'},
            {name:'最新娱乐信息'}
          ]
      }
    }
  }
</script>

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

....
  省略导入路由、使用路由代码...
....
// 嵌套路由的使用:第一层
import Rindex from '../page/routers/index'
// 嵌套路由的使用:第二层
import Rhome from '../page/routers/home/index'
// 嵌套路由的使用:第三层
import Rhomezx from '../page/routers/home/tab/zx'
import Rhomegj from '../page/routers/home/tab/gj'
import Rhomegn from '../page/routers/home/tab/gn'

import Rnews from '../page/routers/news/index'
import Rnewszx from '../page/routers/news/tab/zx'
import Rnewsgj from '../page/routers/news/tab/gj'
import Rnewsgn from '../page/routers/news/tab/gn'

import Ryl from '../page/routers/yl/index'
import Rylzx from '../page/routers/yl/tab/zx'
import Rylmx from '../page/routers/yl/tab/mx'
import Ryljd from '../page/routers/yl/tab/jd'

// 路由规则配置:
export default new Router({
  routes : [
    {
      name: 'rindex',
      path: '/routers',
      component: Rindex,
      redirect: {name: 'rindex_rhome'}, // 跳转到下一级第一个
      children: [
         {
             name: 'rindex_rhome',
             path: 'rindex_rhome', //如果这里不使用 "/rhome" 则表示是归属于上级路由(上级luyou/子path),如果使用 "/rhome" 则表示根路径下访问
             component: Rhome,
             redirect: {name: 'rindex_rhome_Rhomezx'}, //跳转到下级第一层
             children: [
                {
                  name: 'rindex_rhome_Rhomezx',
                  path: 'rindex_rhome_Rhomezx',
                  component: Rhomezx
                },
                {
                  name: 'rindex_rhome_Rhomegj',
                  path: 'rindex_rhome_Rhomegj',
                  component: Rhomegj
                },
                {
                  name: 'rindex_rhome_Rhomegn',
                  path: 'rindex_rhome_Rhomegn',
                  component: Rhomegn
                }
            ]
         },
         {
            name: 'rindex_rnews',
            path: 'rindex_rnews',
            component: Rnews,
            redirect: {name: 'rindex_rnews_Rnewszx'},
            children: [
              {
                  name: 'rindex_rnews_Rnewszx',
                  path: 'rindex_rnews_Rnewszx',
                  component: Rnewszx
              },
              {
                  name: 'rindex_rnews_Rnewsgj',
                  path: 'rindex_rnews_Rnewsgj',
                  component: Rnewsgj
              },
              {
                  name: 'rindex_rnews_Rnewsgn',
                  path: 'rindex_rnews_Rnewsgn',
                  component: Rnewsgn
              }
            ]
        },
        {
            name: 'rindex_ryl',
            path: 'rindex_ryl',
            component: Ryl,
            redirect: {name: 'rindex_ryl_rylzx'},
            children:[
                {
                    name: 'rindex_ryl_rylzx',
                    path: 'rindex_ryl_rylzx',
                    component: Rylzx
                },
                {
                    name: 'rindex_ryl_rylmx',
                    path: 'rindex_ryl_rylmx',
                    component: Rylmx
                },
                {
                    name: 'rindex_ryl_ryljd',
                    path: 'rindex_ryl_ryljd',
                    component: Ryljd
                }
            ]
        }
      ]
    }
  ]
});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 23,125评论 8 124
  • 目录 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element★13489 ...
    余生社会阅读 19,747评论 7 233
  • 今天真算的上是我工作来,印象最深刻的一天了。✊ 因为明天开始连续三天外出学习,所以尽快的跟其他科目的老师调课,...
    姜雪萍阅读 637评论 9 8
  • 我的笔记小结 经济学到底是否建立在“人是理性的”基础之上? 我们知道,人不是永远都处在理性的状态当中的,也就是说,...
    LemonHohO阅读 678评论 0 1
  • 这部电影对奥黛丽•赫本影响之大,难于言说,也许是对她而言,最重要的一部作品吧。因为赫本和路加修女是合二为一的,她们...
    霍甜阅读 724评论 0 3