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


Posted in Javascript onJuly 24, 2019

现在很多的后台管理系统都采用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>

效果图:

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

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
Mar 10 Javascript
jQuery autocomplete插件修改
Apr 17 Javascript
js switch case default 的用法示例介绍
Oct 23 Javascript
jquery text()方法取标签中的文本
Jul 25 Javascript
jQuery学习笔记之基础中的基础
Jan 19 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
Nov 09 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
Apr 12 Javascript
Vue源码学习之初始化模块init.js解析
Nov 02 Javascript
JS实现留言板功能[楼层效果展示]
Dec 27 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
Dec 02 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
Jul 24 #Javascript
Vue.js路由实现选项卡简单实例
Jul 24 #Javascript
vue滚动tab跟随切换效果
Jun 29 #Javascript
Vue.js实现tab切换效果
Jul 24 #Javascript
javascript面向对象三大特征之多态实例详解
Jul 24 #Javascript
javascript面向对象三大特征之继承实例详解
Jul 24 #Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 #Javascript
You might like
深入php 正则表达式的学习探讨
2013/06/06 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
python list转dict示例分享
2014/01/28 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Python中断多重循环的思路总结
2019/10/04 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
python文件和文件夹复制函数
2020/02/07 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
一些关于MySql加速和优化的面试题
2014/01/30 面试题
新闻学专业个人求职信写作
2014/02/04 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
大客户经理岗位职责
2015/04/09 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL
Python必备技巧之函数的使用详解
2022/04/04 Python