vue 路由视图 router-view嵌套跳转的实现

目录
  • 1、修改app.vue页面
  • 2、创建登录页面(/views/login/login.vue)
    • 2.1、在router/index.js中添加登录页面路由
  • 3、创建主页面(/components/index.vue)
    • 3.1、创建主页面路由
  • 4、修改首页
    • 4.1、开启菜单路由模式,并修改菜单跳转路径
    • 4.2、添加router-view
  • 5、创建两个子页面

目的:

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

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

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

前置:引入element-ui

在项目目录下执行命令:npm i element-ui -s

修改main.js,引入element组件

步骤:

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

1、修改app.vue页面

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

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: 'App',
  methods: {
  }
}
</script>

<style>
</style>

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

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

登录页代码:point_down:

<template>
  <div id="login">
    <el-form>
      <el-row :gutter="20">
        <el-col class="title" :offset="9" :span="6">
          <h1>一个登录页面</h1>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col class="col-label" :offset="7" :span="4">
          <span class="label">账号:</span>
        </el-col>
        <el-col :span="4">
          <el-input type="text" placeholder="请输入账号" v-model="account.username"></el-input>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col class="col-label" :offset="7" :span="4">
          <span class="label">密码:</span>
        </el-col>
        <el-col :span="4">
          <el-input type="password" placeholder="请输入密码" v-model="account.password"></el-input>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :offset="8" :span="8">
          <span>
            <a href="#" rel="external nofollow"  rel="external nofollow"  @click="register" >注册账号</a>
            /
            <a href="#" rel="external nofollow"  rel="external nofollow"  @click="resetPwd" >重置密码</a>
          </span>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :offset="10" :span="4">
          <el-button type="primary" round @click="onSubmit">登录</el-button>
        </el-col>
      </el-row>
    </el-form>
  </div>
</template>

<script>
export default {
  name: 'login',
  data() {
    return {
      account: {
        username: '',
        password: ''
      }
    }
  },
  methods: {
    register() {
      this.$message({
        message: '好像没这功能',
        type: 'info'
      })
    },
    resetPwd() {
      this.$message({
        message: '下辈子吧',
        type: 'success'
      })
    },
    onSubmit() {
      this.$router.push('/index')
    }
  }
}
</script>

<style scoped>
  #login {
    text-align: center;
    margin: 0 auto;
  }
  .label {
    height: 40px;
    line-height: 40px;
  }
  .col-label {
    text-align: right;
  }
  .el-row {
    margin-top: 15px;
  }
  .el-button {
    width: 120px;
  }
  .title {
    margin-top: 10%;
  }
</style>

View Code

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

{
      path: '/',
      name: 'login',
      component: () => import('../views/login/login.vue')
},

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

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

<template>
  <el-container style="border: 1px solid #eee">
    <el-aside width="200px" style="background-color: rgb(238, 241, 246)">
      <el-menu :default-openeds="['1']" :router="true">
        <el-submenu index="1">
          <template slot="title"><i class="el-icon-message"></i>导航一</template>
          <el-menu-item-group>
            <template slot="title">分组一</template>
            <el-menu-item index="1-1">选项1</el-menu-item>
            <el-menu-item index="1-2">选项2</el-menu-item>
          </el-menu-item-group>
        </el-submenu>
      </el-menu>
    </el-aside>

    <el-container class="table-div">
      <el-header style="text-align: right; font-size: 12px">
        <el-dropdown>
          <i class="el-icon-setting" style="margin-right: 15px"></i>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item>查看</el-dropdown-item>
            <el-dropdown-item>新增</el-dropdown-item>
            <el-dropdown-item>删除</el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
        <span>王小虎</span>
      </el-header>

      <el-main>
        <table></table>
      </el-main>
    </el-container>
  </el-container>
</template>

<style>
.el-header {
  background-color: #B3C0D1;
  color: #333;
  line-height: 60px;
}

.el-aside {
  color: #333;
}
</style>

<script>
export default {
  name: 'index',
  data() {
  }
}
</script>

<style>
  .table-div {
    width: 100%;
  }
  .el-table {
    height: 100%;
  }
</style>

3.1、创建主页面路由

{
      path: '/index',
      name: 'index',
      component: () => import('@/components/index')
}

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

点击登录,跳转到首页

4、修改首页

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

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

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

4.2、添加router-view

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

5、创建两个子页面

页面可以在任意位置,只要路由地址配置正确即可

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

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

{
      path: '/index',
      name: 'index',
      component: () => import('@/components/index'),   // 这里配置首页默认路由跳转的页面组件
      children: [   // 添加子路由
        {
          path: 'page',  // 注意点:路径前面不要带/,否则无法跳转,在这里吃过亏
          name: 'page',
          components: {   // 注意参数名带s
            table: () => import('@/components/first-page')  // 这里的table跟首页的router-view标签的name一致,才会在首页的路由视图进行跳转,看3.2
          }
        },
        {
          path: 'table',
          name: 'table',
          components: {
            table: () => import('@/components/first-table')
          }
        }
      ]
}

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

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

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

到此这篇关于vue 路由视图 router-view嵌套跳转详情的文章就介绍到这了,更多相关vue 路由视图 router-view嵌套跳转内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue相同路由跳转强制刷新该路由组件操作

    想必大家在平时开发的时候可能遇到这种需求,在打开该菜单页面的情况下,再次点击菜单需要刷新该组件(销毁再创建).而vue自身如果路由不变的情况下是不会这样做的,那么只能使用一些骚操作了. 1.在菜单的路由跳转上绑定一个随机query参数,例如时间戳或者随机数: this.$router.push({ path:"/xxx", query:{ t:Date.now(), }, }); 该操作会触发路由改变,但是组件内的状态没有初始化,因为组件没有被重建. 2.在路由容器上绑定key值: &

  • vue中路由跳转不计入history的操作

    我就废话不多说了,大家还是直接看代码吧~ <van-field label="选择部门" :value="arr.DepartMentName" readonly right-icon="arrow" @click="$router.replace({ name: 'tree' })" /> 在下个页面使用replace跳回来即可 补充知识:vue-router模式为history的项目打包发布后不能通过地址栏里的

  • vue路由相对路径跳转方式

    目录 vue路由相对路径跳转 1.append 属性 2.router.resolve方法 vue router动态路由点击跳转路径地址重复追加 在练习写vue router动态路由时碰到的问题 vue路由相对路径跳转 今天写东西遇到多层路由,路由之间跳转时需要相对路径,因此查了一下官网用到了append属性和router.resolve方法,因此列出具体的使用方法. 1.append 属性 设置 append 属性后,则在当前 (相对) 路径前添加基路径. 类型:boolean 默认值:fal

  • Vue路由this.route.push跳转页面不刷新的解决方案

    Vue路由this.route.push跳转页面不刷新 一.背景 介绍:在vue项目开发中,使用路由进行页面跳转时,路由所跳转的页面不进行刷新. 也就是vue生命周期函数没有执行(created.mounted钩子函数). 案例: A页面: B页面: 问题: 当在A页面第一点击按钮到B页面时,一切正常,当返回到A页面再次点击按钮时,B页面没有执行mounted钩子函数,结果导致mounted函数中查询方法不执行. 二.解决方法: 1.使用activated:{}周期函数代替mounted:{}函

  • vue中路由跳转的方式有哪些你知道吗

    目录 第一种方式:router-link (声明式路由) 第二种方式:router.push(编程式路由) 第三种方式:this.$router.push() (函数里面调用) 第四种方式:this.$router.replace() (用法同上,push) 参考: 总结 第一种方式:router-link (声明式路由) 1. 不带参数 <router-link :to="{name:'home'}"> <router-link :to="{path:'/

  • vue 路由视图 router-view嵌套跳转的实现

    目录 1.修改app.vue页面 2.创建登录页面(/views/login/login.vue) 2.1.在router/index.js中添加登录页面路由 3.创建主页面(/components/index.vue) 3.1.创建主页面路由 4.修改首页 4.1.开启菜单路由模式,并修改菜单跳转路径 4.2.添加router-view 5.创建两个子页面 目的: 实现功能:制作一个登录页面,跳转到首页,首页包含菜单栏.顶部导航栏.主体,标准的后台网页格式.菜单栏点击不同菜单控制主体展示不同的

  • vue.js Router中嵌套路由的实用示例

    前言 随着 Vue.js 单页应用(SPA)变得相当复杂,你开始需要 Vue 路由以及嵌套路由.嵌套路由允许更复杂的用户界面以及相互嵌套的组件.让我们创建一个相对简单的用例,来展示 Vue Router 中嵌套路由的实用性. 用 Vue CLI 进行设置 如果尚未安装,请运行以下命令全局安装 Vue CLI: $ npm install -g @vue/cli 或者 $ yarn global add @vue/cli 现在你能从命令行运行 vue 命令了.让我们创建一个名为 alligator

  • vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作

    最近开发vue项目,遇到的一些问题,这里整合一下,看到一些博客已经有写相关知识,然后自己再次记录一下. 这是关于vue路由相关比较常见的问题,以后遇到相关路由的问题,会不断更新这篇博客. 需求1:从填写表单A页面跳转到B页面,然后再从B页面返回到A页面,实现A页面的所填的数据保留 一.设置路由缓存: 1.App.vue中加入<keep-alive> 具体代码如下: <template> <div id="app"> <!--<img sr

  • Vue路由router详解

    目录 模块化的方式使用路由插件 使用路由 声明式导航 编程式导航 动态路由匹配 通配符匹配路径 查询参数query 响应路由参数的变化 命名路由,路由别名,重定向 嵌套路由 命名视图 导航守卫 (1)全局守卫 (2)路由独享守卫 (3)组件内守卫 导航解析的流程 总结 模块化的方式使用路由插件 (1)安装 npm install vue-router (2)构建文件目录 在src目录下创建一个router文件夹,然后创建一个index.js (3)这里我们通过模块化的方式进行创建路由,方便代码的

  • 详解vue路由篇(动态路由、路由嵌套)

    什么是路由?网络原理中,路由指的是根据上一接口的数据包中的IP地址,查询路由表转发到另一个接口,它决定的是一个端到端的网络路径. web中,路由的概念也是类似,根据URL来将请求分配到指定的一个'端'.(即根据网址找到能处理这个URL的程序或模块) 使用vue.js构建项目,vue.js本身就可以通过组合组件来组成应用程序:当引入vue-router后,我们需要处理的是将组件(components)映射到路由(routes),然后在需要的地方进行使用渲染. 一.基础路由 1.创建vue项目,执行

  • vue 路由嵌套高亮问题的解决方法

    正常路由嵌套是没有问题的,但是如果你已经在当前主路由页面了,然后再次点击主路由就会出现页面数据空白的情况 看代码: //主路由通过v-for循环出来 <div class="list-group"> <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" r

  • vue路由跳转时判断用户是否登录功能的实现

    通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以自己去官网多看看: import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); var state = { isLogin:0, //初始时候给一个 isLogin=0 表示用户未登录 }; const mutations = { cha

  • Vue路由跳转问题记录详解

    最近项目上需要用Vue用来做app,在Vue中使用路由时遇到下面的问题. 路由设置如下: { path:'/tab', component:Tab, children:[{ path:'layoutList', name:'LayoutList', component:LayoutList },{ path:'layoutView/:layoutId', name:'LayoutView', component:LayoutView },{ path:'layoutDetail/:viewId'

  • vue路由跳转传参数的方法

    vue中路由跳转传参数有多种,自己常用的是下面的几种 通过router-link进行跳转 通过编程导航进行路由跳转 1. router-link <router-link :to="{ path: 'yourPath', params: { name: 'name', dataObj: data }, query: { name: 'name', dataObj: data } }"> </router-link> 1. path -> 是要跳转的路由路径

  • 详解vue 路由跳转四种方式 (带参数)

    1.  router-link 1. 不带参数 <router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建议用name // 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始. 2.带参数 <router-link :to="{name:'home', para

随机推荐