实现功能:制作一个登录页面,跳转到首页,首页包含菜单栏、顶部导航栏、主体,标准的后台网页格式。菜单栏点击不同菜单控制主体展示不同的组件(不同的页面)。

配置router-view嵌套跳转需要准备两个主要页面,一个由app.vue跳转的登录页面(login.vue),一个由登录页面(login.vue)跳转首页(index.vue)。另外还需要两个用于菜单跳转页面,页面内容自定义

我这里使用的是element-ui作为模板

  1. 创建登录页面(login.vue)
  2. 创建后台操作页面(index.vue)
  3. 配置后台操作页面菜单跳转
  4. 配置嵌套路由视图路由控制菜单跳转

1、修改app.vue页面

app页面只要放置一个router-view标签即可,每一个路由请求默认都是从这里进去跳转

  1. <template>
  2. <div id="app">
  3. <router-view></router-view>
  4. </div>
  5. </template>
  6.  
  7. <script>
  8. export default {
  9. name: 'App',
  10. methods: {
  11. }
  12. }
  13. </script>
  14.  
  15. <style>
  16. </style>

2、创建登录页面(/views/login/login.vue)

这里的登录按钮跳转是直接跳转到主页面,当前登陆页面将完全被替换掉

主页面代码

  1. <template>
  2. <div id="login">
  3. <el-form>
  4. <el-row :gutter="20">
  5. <el-col class="title" :offset="9" :span="6">
  6. <h1>一个登录页面</h1>
  7. </el-col>
  8. </el-row>
  9. <el-row :gutter="20">
  10. <el-col class="col-label" :offset="7" :span="4">
  11. <span class="label">账号:</span>
  12. </el-col>
  13. <el-col :span="4">
  14. <el-input type="text" placeholder="请输入账号" v-model="account.username"></el-input>
  15. </el-col>
  16. </el-row>
  17. <el-row :gutter="20">
  18. <el-col class="col-label" :offset="7" :span="4">
  19. <span class="label">密码:</span>
  20. </el-col>
  21. <el-col :span="4">
  22. <el-input type="password" placeholder="请输入密码" v-model="account.password"></el-input>
  23. </el-col>
  24. </el-row>
  25. <el-row :gutter="20">
  26. <el-col :offset="8" :span="8">
  27. <span>
  28. <a href="#" @click="register" >注册账号</a>
  29. /
  30. <a href="#" @click="resetPwd" >重置密码</a>
  31. </span>
  32. </el-col>
  33. </el-row>
  34. <el-row :gutter="20">
  35. <el-col :offset="10" :span="4">
  36. <el-button type="primary" round @click="onSubmit">登录</el-button>
  37. </el-col>
  38. </el-row>
  39. </el-form>
  40. </div>
  41. </template>
  42.  
  43. <script>
  44. export default {
  45. name: 'login',
  46. data() {
  47. return {
  48. account: {
  49. username: '',
  50. password: ''
  51. }
  52. }
  53. },
  54. methods: {
  55. register() {
  56. this.$message({
  57. message: '好像没这功能',
  58. type: 'info'
  59. })
  60. },
  61. resetPwd() {
  62. this.$message({
  63. message: '下辈子吧',
  64. type: 'success'
  65. })
  66. },
  67. onSubmit() {
  68. this.$router.push('/index')
  69. }
  70. }
  71. }
  72. </script>
  73.  
  74. <style scoped>
  75. #login {
  76. text-align: center;
  77. margin: 0 auto;
  78. }
  79. .label {
  80. height: 40px;
  81. line-height: 40px;
  82. }
  83. .col-label {
  84. text-align: right;
  85. }
  86. .el-row {
  87. margin-top: 15px;
  88. }
  89. .el-button {
  90. width: 120px;
  91. }
  92. .title {
  93. margin-top: 10%;
  94. }
  95. </style>

2.1、在router/index.js中添加登录页面路由

  1. {
  2. path: '/',
  3. name: 'login',
  4. component: () => import('../views/login/login.vue')
  5. },

3、创建主页面(/components/index.vue)

主页面主要分为三块,左侧菜单栏(el-menu),顶部导航栏(el-container),主体展示页面(el-main),这部分是从elment-ui中的布局容器实例拷贝过来的(https://element.eleme.cn/#/zh-CN/component/container)

  1. <template>
  2. <el-container style="border: 1px solid #eee">
  3. <el-aside width="200px" style="background-color: rgb(238, 241, 246)">
  4. <el-menu :default-openeds="['1']" :router="true">
  5. <el-submenu index="1">
  6. <template slot="title"><i class="el-icon-message"></i>导航一</template>
  7. <el-menu-item-group>
  8. <template slot="title">分组一</template>
  9. <el-menu-item index="1-1">选项1</el-menu-item>
  10. <el-menu-item index="1-2">选项2</el-menu-item>
  11. </el-menu-item-group>
  12. </el-submenu>
  13. </el-menu>
  14. </el-aside>
  15.  
  16. <el-container class="table-div">
  17. <el-header style="text-align: right; font-size: 12px">
  18. <el-dropdown>
  19. <i class="el-icon-setting" style="margin-right: 15px"></i>
  20. <el-dropdown-menu slot="dropdown">
  21. <el-dropdown-item>查看</el-dropdown-item>
  22. <el-dropdown-item>新增</el-dropdown-item>
  23. <el-dropdown-item>删除</el-dropdown-item>
  24. </el-dropdown-menu>
  25. </el-dropdown>
  26. <span>王小虎</span>
  27. </el-header>
  28.  
  29. <el-main>
  30. <table></table>
  31. </el-main>
  32. </el-container>
  33. </el-container>
  34. </template>
  35.  
  36. <style>
  37. .el-header {
  38. background-color: #B3C0D1;
  39. color: #333;
  40. line-height: 60px;
  41. }
  42.  
  43. .el-aside {
  44. color: #333;
  45. }
  46. </style>
  47.  
  48. <script>
  49. export default {
  50. name: 'index',
  51. data() {
  52. }
  53. }
  54. </script>
  55.  
  56. <style>
  57. .table-div {
  58. width: 100%;
  59. }
  60. .el-table {
  61. height: 100%;
  62. }
  63. </style>

2.1、创建主页面路由

  1. {
  2. path: '/index',
  3. name: 'index',
  4. component: () => import('@components/index')
  5. }

至此,由登录页面跳转到主页面的操作配置就完成了。看看效果。启动项目,访问http://localhost:8080/#/

点击登录,跳转到首页

3、修改首页,主要修改两个部分,菜单跳转路径,主体配置路由视图

3.1、开启菜单路由模式,并修改菜单跳转路径

在el-menu菜单中开启vue-router模式,并在el-menu-item标签中的index配置要跳转的页面地址

3.2、添加router-view,直接将主体内容替换为router-view标签,并为name属性添加参数,我这使用table标识,这个很重要,路由需要根据这个name属性指定跳转的路由视图

4、创建两个子页面(页面可以在任意位置,只要路由地址配置正确即可)

我这创建了first-page.vue,first-table.vue(页面内容自定义)

在router/index.js配置路由,在哪个页面下增加的router-view组件,就在相应的路由配置中添加children,这里是在index路由修改配置,添加children,配置path、name和components(这里注意,如果只配置默认路由视图跳转,用的参数是component,配置多路由视图跳转时components)

  1. {
  2. path: '/index',
  3. name: 'index',
  4. component: () => import('@/components/index'), // 这里配置首页默认路由跳转的页面组件
  5. children: [ // 添加子路由
  6. {
  7. path: 'page', // 注意点:路径前面不要带/,否则无法跳转,在这里吃过亏
  8. name: 'page',
  9. components: { // 注意参数名带s
  10. table: () => import('@/components/first-page') // 这里的table跟首页的router-view标签的name一致,才会在首页的路由视图进行跳转,看3.2
  11. }
  12. },
  13. {
  14. path: 'table',
  15. name: 'table',
  16. components: {
  17. table: () => import('@/components/first-table')
  18. }
  19. }
  20. ]
  21. }

这样配置访问地址为:localhost:8080/#/index/page、localhost:8080/#/index/table

到这里配置完成,访问页面测试一下

可以看到,两个菜单配置改变了主体的路由视图,控制视图展示的页面组件。配置完成

vue 路由视图,router-view嵌套跳转的更多相关文章

  1. vue路由--使用router.push进行路由跳转

    手机赚钱怎么赚,给大家推荐一个手机赚钱APP汇总平台:手指乐(http://www.szhile.com/),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元 route-link是在html中静态定 ...

  2. 【Vue】【Router】手动跳转用 this.$router.push() 时 $router 未定义的问题

    初入Vue,手写路由跳转时的问题: toXxxRoute: () => { this.$router.push({'path': '/xxx', 'name': 'xxx'}) } 由于使用了箭 ...

  3. vue路由请求 router

    创建一个Router.js文件 // 路由请求//声明一个常量设置路菜单// import Vue from "vue/types/index";import Vue from ' ...

  4. vue路由的钩子函数和跳转

    首页可以控制导航跳转,beforeEach,afterEach等,一般用于页面title的修改.一些需要登录才能调整页面的重定向功能. beforeEach主要有3个参数to,from,next. t ...

  5. vue路由 视图命名

    <body> <div id="app"> <p @click="go">hello app!</p> < ...

  6. vue路由守卫+cookie实现页面跳转时验证用户是否登录----(二)设置路由守卫

    上一篇我们已经封装好了cookie方法,登录成功之后也可以吧用户信息存到cookie中,接下来需要在router/index.js中引入一下cookie.js文件 然后继续添加以下代码 /* * be ...

  7. vue多个路由复用同一个组件的跳转问题(this.router.push)

    因为router-view传参问题无法解决,比较麻烦. 所以我采取的是@click+this.router.push来跳转 但是现在的问题是跳转后,url改变了,但是页面的数据没有重新渲染,要刷新才可 ...

  8. vue教程3-06 vue路由嵌套(多层路由),路由其他信息

    多层嵌套: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. vue 路由缓存 路由嵌套 路由守卫 监听物理返回

    最近开发vue项目,遇到的一些问题,这里整合一下,看到一些博客已经有写相关知识,然后自己再次记录一下. 这是关于vue路由相关比较常见的问题,以后遇到相关路由的问题,会不断更新这篇博客. 需求1:从填 ...

随机推荐

  1. 造轮子系列之RPC 1:如何从零开始开发RPC框架

    前言 RPC 框架是后端攻城狮永远都绕不开的知识点,目前业界比较知名有 Dubbo.Spring Cloud 等.很多人都停留在了只会用的阶段,作为程序猿,拥有好奇心深入学习,才能有效提高自己的竞争力 ...

  2. swift文件调用oc分类时崩溃解决办法(可能全网唯一)

    背景 oc为基础创建的sdk混编工程,在被sdk关联的混编demo工程中swift文件调用时,会崩溃,提示找不到sdk中oc分类方法.常规的,在demo中设置-Objc和-all_load也还是会崩. ...

  3. for循环排它算法(经典实用)

    核心代码 let lis = document.querySelectorAll("li"); for(let i = 0; i < lis.length; i ++) { ...

  4. C++面向对象 1(类-封装)

    1 //类和对象 2 //C++ 面向对象 三大特性 : 封装 继承 多态 3 4 //设计一个圆类,求圆的周长 5 //圆周长 = 2*PI * 半径 6 7 #include <iostre ...

  5. 如何让win10开机默认开启小键盘?

    如何让win10开机默认开启小键盘? windows10默认是关闭小键盘的.每次输入开机密码的时候都需要按一下小键盘开启键(numlock),才能按数字键 一.运行注册表编辑器,修改InitialKe ...

  6. Linux C中strcpy , strncpy , strlcpy 的区别

    strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  7. MySQL-12-innodb引擎补充

    innodb引擎保证事务的ACID 概念 redo log ---> 重做日志 ib_logfile0~1 50M 轮询使用 redo log buffer ---> redo内存区域 i ...

  8. Android WorkManager使用入门

    WorkManager使用入门 WorkManager提供了任务调度功能,我们可以对工作进行标记或命名. 我们用一个示例来演示如何使用WorkManager.本文使用Kotlin. 入门示例 grad ...

  9. CNVD-2021-14536 锐捷 RG-UAC 统一上网行为管理审计系统信息泄露漏洞

    漏洞简介 锐捷 RG-UAC 统一上网行为管理审计系统存在信息泄露,攻击者通过网页源代码可间接获取管理用户账号密码,登录管理后台. 漏洞复现 fofa搜索以下关键字 title="RG-UA ...

  10. SpringBoot中Jackson的过滤使用

    在接口的返回对象中,可能会有一些属性为null或者需要禁止某些字段返回给客户端. 在SpringBoot中可使用内置了Jackson实现这个需求 1. 过滤为null字段 在实体类中使用@JsonIn ...