Vue三層嵌套路由的示例代碼
Vue嵌套路由:
實(shí)現(xiàn)效果(路由三層嵌套,點(diǎn)擊一級(jí)tab顯示二級(jí)tab效果,二級(jí)tab點(diǎn)擊切換對(duì)應(yīng)內(nèi)容,不在tab區(qū)域里的內(nèi)容,切換時(shí)不重復(fù)渲染):
Demo訪問(wèn)時(shí)路徑: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)">首頁(yè)</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)">娛樂(lè)</router-link> <!-- 二級(jí)子路由頁(yè)面 --> <router-view /> </div> </template> <script> export default { data(){ return { selected: 1 } }, methods: { tabck(index){ this.selected = index; //設(shè)置tab選中項(xiàng) } } } </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頁(yè)面信息:<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)">國(guó)際HOME</router-link> <router-link :to="{name: 'rindex_rhome_Rhomegn'}" class="rlink" :class="{active:selected == 3}" @click.native="tabck(3)">國(guó)內(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> 國(guó)際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:'國(guó)際HOME'}, {name:'國(guó)際HOME'}, {name:'國(guó)際HOME'} ] } } } </script>
gn.vue :
<template> <div> 國(guó)內(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:'國(guó)內(nèi)HOME'}, {name:'國(guó)內(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> 新聞頁(yè)面信息:<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)">國(guó)際新聞</router-link> <router-link class="rlink" :class="{active:selected == 3}" @cllick.native="tabck(3)">國(guó)內(nèi)新聞</router-link> <!-- 子路由 --> <router-view/> </div> </template> <script> export default { data () { return { selected: 1 } }, methods: { tabck(index){ this.selected = index; //切換tab,設(shè)置選中項(xiàng) } } } </script>
1-2-1 routers/news/tab/gj.vue、gn.vue、zx.vue
gj.vue:
<template> <div> 國(guó)際新聞信息:<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:'國(guó)際新聞信息'}, {name:'國(guó)際新聞信息'}, {name:'國(guó)際新聞信息'}, {name:'國(guó)際新聞信息'}, {name:'國(guó)際新聞信息'} ] } } } </script>
gn.vue:
<template> <div> 國(guó)內(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:'國(guó)內(nèi)新聞信息'}, {name:'國(guó)內(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> 娛樂(lè)頁(yè)面信息:<br/> <router-link class="rlink" :class="{active:selected == 1}" @click.native="tabck(1)">最新娛樂(lè)</router-link> <router-link class="rlink" :class="{active:selected == 2}" @click.native="tabck(2)">明星娛樂(lè)</router-link> <router-link class="rlink" :class="{active:selected == 3}" @click.native="tabck(3)">焦點(diǎn)娛樂(lè)</router-link> <!-- 子路由--> <router-view/> </div> <script> export default { data(){ return { selected: 1 } }, methods: { tabck(index){ this.selected = index; //設(shè)置tab選中項(xiàng) } } } </script> </template>
1-3-2 routers/yl/tab/jd.vue、mx.vue、zx.vue
jd.vue:
<template> <div> 焦點(diǎn)娛樂(lè)信息:<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:'焦點(diǎn)娛樂(lè)信息'}, {name:'焦點(diǎn)娛樂(lè)信息'} ] } } } </script>
mx.vue:
<template> <div> 明星娛樂(lè)信息:<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:'明星娛樂(lè)信息'}, {name:'明星娛樂(lè)信息'} ] } } } </script>
zx.vue:
<template> <div> 最新娛樂(lè)信息:<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:'最新娛樂(lè)信息'}, {name:'最新娛樂(lè)信息'} ] } } } </script>
2.路由配置規(guī)則(router/index.js)
.... 省略導(dǎo)入路由、使用路由代碼... .... // 嵌套路由的使用:第一層 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)到下一級(jí)第一個(gè) children: [ { name: 'rindex_rhome', path: 'rindex_rhome', //如果這里不使用 "/rhome" 則表示是歸屬于上級(jí)路由(上級(jí)luyou/子path),如果使用 "/rhome" 則表示根路徑下訪問(wèn) component: Rhome, redirect: {name: 'rindex_rhome_Rhomezx'}, //跳轉(zhuǎn)到下級(jí)第一層 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 } ] } ] } ] });
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue配置marked鏈接添加target="_blank"的方法
這篇文章主要介紹了Vue配置marked鏈接添加target="_blank"的方法,文中給大家提到了vue實(shí)現(xiàn)類(lèi)似target="_blank"打開(kāi)新窗口的代碼,感興趣的朋友參考下吧2019-07-07Vue重要修飾符.sync對(duì)比v-model的區(qū)別及使用詳解
這篇文章主要為大家介紹了Vue中重要修飾符.sync與v-model的區(qū)別對(duì)比及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07前端啟動(dòng)出現(xiàn)報(bào)錯(cuò)提示vue-cli-service?serve的原因及解決辦法
這篇文章主要給大家介紹了關(guān)于前端啟動(dòng)出現(xiàn)報(bào)錯(cuò)提示vue-cli-service?serve的原因及解決辦法,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11淺析vue cli3 封裝Svgicon組件正確姿勢(shì)(推薦)
這篇文章主要介紹了vue cli3 封裝Svgicon組件正確姿勢(shì),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Vue實(shí)現(xiàn)登錄記住賬號(hào)密碼功能的思路與過(guò)程
最近在學(xué)習(xí)vue,發(fā)現(xiàn)了vue的好多坑,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)登錄記住賬號(hào)密碼功能的思路與過(guò)程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11Vue中前后端使用WebSocket詳細(xì)代碼實(shí)例
websocket通信是很好玩的,也很有用的的通信方式,下面這篇文章主要給大家介紹了關(guān)于Vue中前后端使用WebSocket的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03vue動(dòng)畫(huà)效果實(shí)現(xiàn)方法示例
這篇文章主要介紹了vue動(dòng)畫(huà)效果實(shí)現(xiàn)方法,結(jié)合完整實(shí)例形式分析了vue.js+animate.css實(shí)現(xiàn)的動(dòng)畫(huà)切換效果相關(guān)操作技巧,需要的朋友可以參考下2019-03-03