vue子路由跳转实现tab选项卡

现在很多的后台管理系统都采用tab选项卡的布局,左边是导航栏固定,右边是对应的页面,每次点击左边的导航标题,只有右面的对应页面再切换,而vue要做tab选项卡,推荐使用<router-link></router-link>实现a标签的效果,然后使用<router-view></router-view>实现插槽的效果,把对应的页面 "塞" 进去,具体实现看下面的案例:

1、这是tab选项卡的页面,布局就不说了,主要是<router-link :to="a.url" :key="index" v-for="(a,index) in Data">{{a.title}}</router-link>

,其中to指向你要跳转的路径,这是关键,而<router-view></router-view>就是最终其他子页面要显示的地方。

<template>
    <div  class="index-box">
        <nav>
            <h1>导航</h1>
            <!-- 所有的导航标题,进行路由跳转指向 -->
            <router-link :to="a.url" :key="index" v-for="(a,index) in Data">{{a.title}}</router-link>
        </nav>
        <div class="content">
            <!-- 路由插槽:路由跳转的位置 -->
            <router-view></router-view>
        </div>

    </div>
</template>

<script>
    import navData from "../../static/data/nav"
    export default {
        name: "Index",
        data(){
            return {
                Data:[]
            }
        },
        methods:{
            init(){
                this.Data = navData.navData;
            }
        },
        created(){
            this.init();
        }
    }
</script>

<style scoped>
    /* 容器 */
    .index-box{
        width: 100%;
        height: 100%;
        background: #212224;
        display: flex;
    }
    /* 左侧导航条 */
    nav{
        width: 260px;
        height: 100%;
        background: #323437;
        overflow: hidden;
        float: left;
    }
    /* 导航 */
    nav h1{
        color: #f2ffff;
        margin: 10px 0 10px 10px;
    }
    /* 导航标题 */
    nav a{
        display: block;
        width: 100%;
        height: 45px;
        color: #f2ffff;
        background: #2e3033;
        padding-left: 10px;
        line-height: 45px;
        font-size: 20px;
        margin-bottom: 10px;
    }
    /* 右侧内容 */
    .content{
        flex: 1;
        padding: 20px;
    }
</style>

2、路由配置

这个案例中,默认显示的就是我tab选项卡的页面,所以其他子页面我就以这个页面配置的子路由

如果有其他需求,就再需要的地方配置子路由即可

import Vue from 'vue'
import Router from 'vue-router'
// 首页
import Tab from "../pages/Tab"
// 页面一
import PageOne from "../pages/PageOne"
// 页面二
import PageTwo from "../pages/PageTwo"
// 页面三
import PageThree from "../pages/PageThree"

Vue.use(Router);

export default new Router({
  routes: [
    {
        // 默认显示的页面
        path: '/',
        name: 'Tab',
        component: Tab,
        children:[
            {    
                // 子路由中默认显示的页面
                path: '',
                name: 'PageOne',
                component: PageOne
            },
            {
                path: 'PageTwo',
                name: 'PageTwo',
                component: PageTwo
            },
            {
                path: 'PageThree',
                name: 'PageThree',
                component: PageThree
            }
        ]
    }
  ]
})

这里再提供一种情况:比如我默认显示的是登录页面,登录进入后是首页,是tab选项卡的布局,所以我只要给首页配置子路由就可以了

import Vue from 'vue'
import Router from 'vue-router'
// import HelloWorld from '@/components/HelloWorld'
// 首页框架
import Index from "../pages/Index";
// 首页
import FunctionsIndex from "../components/Functions/FunctionsIndex";
// 数据源列表
import FunctionsDbSource from "../components/Functions/FunctionsDbSource"
// 角色管理
import FunctionsRoleManagement from "../components/Functions/FunctionsRoleManagement"
// 登录
import Login from "../pages/Login"
Vue.use(Router);

export default new Router({
  linkExactActiveClass: "act",
  mode: "history",
  routes: [
    {
      //  首页
      path: '/Index',
      name: 'Index',
      component: Index,
      children: [
        {
          //  首页中默认显示统计页面
          path: '',
          name: 'Total',
          component: FunctionsIndex
        },
        {
          path: 'DbSource',
          name: 'DbSource',
          component: FunctionsDbSource
        },
        {
          path: 'RoleManagement',
          name: 'RoleManagement',
          component: FunctionsRoleManagement
        }
      ]
    },
      // 默认显示登录页面
    {
      path: '/',
      name: 'Login',
      component: Login
    }
  ]
})

3、配置json文件

因为每个系统,侧边栏的导航标题都不一样,而且也不能保证后期不会再加,所以我推荐把导航标题提出来,到时候只要v-for循环<router-link>就可以了(循环具体操作返回上面看第一个代码块),然后在选项卡页面引入json,在vue方法中把它赋值给data中的变量,创建后调用方法即可,之后再增加导航标题,只需要在json中增加即可

{
    "navData":[
        {
            "title":"子页一",
            "url":"/"
        },
        {
            "title":"子页二",
            "url":"/PageTwo"
        },
        {
            "title":"子页三",
            "url":"/PageThree"
        }
    ]
}

4、之后写好其他页面,就能实现这个效果了

<template>
    <h1>这是子页一,默认显示</h1>
</template>

<script>
    export default {
        name: "PageOne"
    }
</script>

<style scoped>
    h1{
        color: #f2ffff;
    }
</style>

效果图:

image

再追加一个上面所说的默认是登录页面,然后登录成功后显示首页的tab选项卡的效果图,因为没开数据库,我就模拟演示一下,手动登录成功进入主页:

image

好了,以上就完成了一个简单的tab选项卡布局,大家去试试吧。

如有问题,请指出,接受批评。
个人微信公众号:


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

推荐阅读更多精彩内容

  • 回葫芦岛的路上一直在哼一首歌《驿动的心》不知道前世我做了什么 今生才有如此的境遇 有这么多城市承载着我的记忆我的生...
    AD宁静致远A阅读 154评论 0 0
  • 道貌岸然 “你一个佛国人,驱使妖兽出现在我华夏地界,意欲何为?” “听闻佛国特务潜入华夏,盗取我华夏至宝,你这个佛...
    飄雲阅读 230评论 1 6
  • 111111111111111111111111111111111111111111111111111111111...
    小王_e94a阅读 174评论 0 0
  • 当两个人闹矛盾的时候,常常引起爆发的并不是这件事情本身,而是两个人的态度。 两个人处于非理智状态下,很容易说出非理...
    Jake先森阅读 533评论 4 12
  • 每当我看到某篇文章里提起自己已看完、正在看或准备看的书籍时,都很羡慕。 最近的自己忙着归纳各类资料,看的都是资料书...
    叶青竹阅读 249评论 0 3