Vue三層嵌套路由的示例代碼
Vue嵌套路由:
實現(xiàn)效果(路由三層嵌套,點擊一級tab顯示二級tab效果,二級tab點擊切換對應(yīng)內(nèi)容,不在tab區(qū)域里的內(nèi)容,切換時不重復渲染):
Demo訪問時路徑:http://IP:端口/#/routers/

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

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; //設(shè)置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)">國內(nèi)HOME</router-link>
<!-- 子路由(三層) -->
<router-view />
</div>
</template>
<script>
export default {
data(){
return {
selected: 1
}
},
methods: {
tabck(index) {
this.selected = index; //設(shè)置選中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>
國內(nèi)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:'國內(nèi)HOME'},
{name:'國內(nèi)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)">國內(nèi)新聞</router-link>
<!-- 子路由 -->
<router-view/>
</div>
</template>
<script>
export default {
data () {
return {
selected: 1
}
},
methods: {
tabck(index){
this.selected = index; //切換tab,設(shè)置選中項
}
}
}
</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>
國內(nèi)新聞信息:<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:'國內(nèi)新聞信息'},
{name:'國內(nèi)新聞信息'}
]
}
}
}
</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; //設(shè)置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.路由配置規(guī)則(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'
// 路由規(guī)則配置:
export default new Router({
routes : [
{
name: 'rindex',
path: '/routers',
component: Rindex,
redirect: {name: 'rindex_rhome'}, // 跳轉(zhuǎn)到下一級第一個
children: [
{
name: 'rindex_rhome',
path: 'rindex_rhome', //如果這里不使用 "/rhome" 則表示是歸屬于上級路由(上級luyou/子path),如果使用 "/rhome" 則表示根路徑下訪問
component: Rhome,
redirect: {name: 'rindex_rhome_Rhomezx'}, //跳轉(zhuǎn)到下級第一層
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'},
chidren:[
{
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
}
]
}
]
}
]
});
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue配置marked鏈接添加target="_blank"的方法
這篇文章主要介紹了Vue配置marked鏈接添加target="_blank"的方法,文中給大家提到了vue實現(xiàn)類似target="_blank"打開新窗口的代碼,感興趣的朋友參考下吧2019-07-07
Vue重要修飾符.sync對比v-model的區(qū)別及使用詳解
這篇文章主要為大家介紹了Vue中重要修飾符.sync與v-model的區(qū)別對比及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
前端啟動出現(xiàn)報錯提示vue-cli-service?serve的原因及解決辦法
這篇文章主要給大家介紹了關(guān)于前端啟動出現(xiàn)報錯提示vue-cli-service?serve的原因及解決辦法,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11
淺析vue cli3 封裝Svgicon組件正確姿勢(推薦)
這篇文章主要介紹了vue cli3 封裝Svgicon組件正確姿勢,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04

