Vue 嵌套路由使用总结
Vue 嵌套路由使用总结
by:授客 QQ:1033553122
开发环境
Win 10
node-v10.15.3-x64.msi
下载地址:
需求场景
如下图,我们希望点击导航栏不同菜单时,导航栏下方加载不同的组件,进而展示不同的页面内容

解决方案
使用动态路由
新建home.vue作为子页面组件
<template>
<div>
<h3>home Page</h3>
<p>home page content</p>
</div>
</template>
<script>
export default {
name: "homePage",
};
</script>
<style scoped>
h3 {
font-size: 30px;
}
</style>
新建nav1.vue作为子页面组件
<template>
<div>
<h3>nav1 Page</h3>
<p>nav1 page content</p>
</div>
</template>
<script>
export default {
name: "nav1Page",
};
</script>
<style scoped>
h3 {
font-size: 30px;
}
</style>
新建index.vue作为父页面
<template>
<div class="container">
<div class="nav">
<ul>
<li>
<a @click="clickHome">首页</a>
</li>
<li>
<a @click="clickNav1">导航1</a>
</li>
</ul>
</div>
<div class="content">
<router-view></router-view>
</div>
</div>
</template>
<script>
export default {
methods: {
clickHome() {
this.$router.push("/index/home");
},
clickNav1() {
this.$router.push("nav1");
}
}
};
</script>
<style>
.nav ul {
width: 100%;
height: 30px;
margin: 5px;
padding: 0;
}
.nav ul li {
float: left; /*横排显示*/
list-style-type: none; /*去掉前面的点*/
}
.nav ul li a {
width: 100px;
display: block; /*设置为block,width才起作用*/
height: 28px;
line-height: 28px;
background: grey;
color: #fff;
margin: 0px 1px;
font-size: 18px;
text-align: center;
text-decoration: none;
}
.nav ul li a:hover {
width: 100px;
height: 26px;
line-height: 28px;
border: 1px solid red;
color: red;
background: #fff;
}
.content {
position: absolute;
top: 40px;
bottom: 0px;
right: 10px;
left: 15px;
background: rgb(176, 207, 180)
}
</style>
说明:
1、
methods: {
clickHome() {
this.$router.push("/index/home");
},
clickNav1() {
this.$router.push("nav1");
}
}
点击对应“首页”菜单,“导航1”时分别触发调用这里定义了两个方法clickHome()和clickNav1(),两个方法的实现都是调用this.$router.push(),航到不同的 UR(跳转到不同的页面)。另外,push这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,可以回到之前的页面
需要注意的是,这里给push方法提供的代表路径的字符串。如果该字符串不以“/”打头,则表示相对路径,相对于父级路由的path。如果该字符串以“/”打头,则表示绝对路径的,相对于根路径“/”
例中,触发clickNav1()调用时,提供的路径字符串为“nav1”,为相对路径,父级路由路径为/index,所以点击后跳转的url路径为/index/nav1。
例中,触发clickHome()调用时,提供的路径字符串为“/index/home”,为绝对路径,所以点击后跳转的url路径为/index/home。
2、
<div class="content">
<router-view></router-view>
</div>
这里通过在父页面,即index.vue组件中添加<router-view></router-view>实现动态加载不同组件页面。点击导航菜单时,会自动加载对应的组件,然后替换<router-view>元素为对应的组件内容。
参考链接:
https://router.vuejs.org/zh/guide/essentials/navigation.html
https://router.vuejs.org/zh/guide/essentials/nested-routes.html
修改router/index.js
import Vue from "vue"
import Router from "vue-router"
import index from "@/views/index"
import home from "@/views/home"
import nav1 from "@/views/nav1"
Vue.use(Router)
export default new Router({
mode: "history",
routes: [
{
path: "/index",
name: "index",
component: index,
children: [
{
path: "/index/home",
name: "home",
component: home
},
{
path: "nav1",
name: "nav1",
component: nav1
}
]
}
]
})
说明:
1、vue路由通过children实现路由嵌套。个人理解,嵌套路由控制内容子组件内容的展示区:实现父组件的内容展示区保持不变,子组件内容展示区动态变化。
2、同this.$router.push(path),这里的path也分相对路径(相对于父级路由的path路径),和绝对路径(相对于“/”)。如上,/index/home为绝对路径,nav1为相对路径(其绝对路径为/index/nav1)。注意,这里path是否为绝对路径,不影响是否嵌套路由,是否嵌套路由,是通过children决定的,只是影响路由匹配。如上,如果path: "nav1",写成path: "/nav1",,那么执行this.$router.push("nav1")时,跳转的url为/index/nav1,将找不到匹配的路由
3、this.$router.push(path) 和这里routes的关系:
个人理解,执行this.$router.push(path)后,程序自动获取需要跳转的绝对url,暂且称之为toPath,然后在routes中进行匹配,如果匹配到则加载对应的组件。
总结
通过router-view实现在当前指定容器中动态加载不同组件,展示不同页面的大致实现思路:
1、 在当前页面(这里称之为父页面).vue文件template模板中的指定位置(“包含”子组件内容的容器),添加<router-view></router-view>元素
2、 router/index.js中给父页面路径所在的路由,添加子路由:子组件的加载url对应的路由
Vue 嵌套路由使用总结的更多相关文章
- vue嵌套路由 && 404重定向
第一部分: vue嵌套路由 嵌套路由是什么? 嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思. 比如在vue中,我们如果不使用嵌套路由,那么只有一个<rou ...
- vue嵌套路由与404重定向实现方法分析
第一部分: vue嵌套路由 嵌套路由是什么? 嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思. 比如在vue中,我们如果不使用嵌套路由,那么只有一个<rout ...
- vue嵌套路由--params传递参数
在嵌套路由中,父路由向子路由传值除了query外,还有params,params传值有两种情况,一种是值在url中显示,另一种是值不显示在url中. 1.显示在url中index.html <d ...
- vue嵌套路由总结
嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思. 比如在vue中,我们如果不使用嵌套路由,那么只有一个<router-view>,但是如果使用,那么在一 ...
- vue嵌套路由-query传递参数(三)
在嵌套路由中我们经常会遇到父路由向子路由里面传递参数,传递参数有两种方法,通过 query 或者 params index.html <div id="app"> &l ...
- vue嵌套路由
父组件 (注:to="/Flow/moban_a"这里不是文件加路径,是父组件路由+子组件路由) 路由配置
- VUE温习:nextTick、$refs、嵌套路由、keep-alive缓存、is特性、路由属性用法、路由钩子函数
一.$nextTick 1.vue的dom执行异步更新,只要观察到数据变化,vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变. 2.vue.$nextTick(cb),数据发生变化,更新 ...
- vue路由(一个包含重定向、嵌套路由、懒加载的main.js如下)and 路由跳转传参的query和params的异同
import Vue from 'vue'import VueRouter from 'vue-router'import App from './App'Vue.use(VueRouter)cons ...
- VUE router-view 页面布局 (嵌套路由+命名视图)
嵌套路由 实际生活中的应用界面,通常由多层嵌套的组件组合而成.同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如: /user/foo/profile /user/foo/posts ...
随机推荐
- SpringBoot(一) 入门介绍
SpringBoot 简介 springBoot 是 spring 团队伴随着 spring4.0 一同发布的框架,已然成为该团队的一个非常重要的项目.其作用是帮助我们简单迅速地创建一个独立的产品级别 ...
- 第十周CTF解答
第十周write-up解题答案及过程 隐写诶 直接用WinRAR查看就能看到其flag{0ca175b9c0f726a831d895e269332461 } 第一题 将后缀名改为 rar ,发现压缩包 ...
- FIB表与RIB表的区别与联系
RIB (route information base) 和 FIB (forwarding information base),又称Ip路由表 和 CEF表,它们之间的关系可以用下面这张图片来高度概 ...
- 手把手教你如何构建Vue前端组件库
在前端开发中可能会遇到将相同的功能模板集合成一个组件,供他人调用,这样可以减少重复造轮子,也可以节约人力.财力,更能够提高代码的可维护度:下面将通过详细的步骤教你如何构建一个Vue前端组件. 1.在本 ...
- 接口文档word版
一. 分类中某某某接口 接口说明: 请求URL: http://120.26.212.11:8199/xhcms/catalogFirst 请求参数说明: 参数名 必选 类型 参数说明 返回: {&q ...
- 4~20MA 转 电压输出
ICL7660 50mA LM2662/LM2663 200mA
- 吴裕雄--天生自然 PYTHON数据分析:所有美国股票和etf的历史日价格和成交量分析
# This Python 3 environment comes with many helpful analytics libraries installed # It is defined by ...
- 微信小程序后端开发流程
微信小程序后端开发流程根据官网总结为两个步骤 1.前端调用 wx.login 返回了code,然后调用wx.getUserInfo获取到用户的昵称 头像 2.服务端根据code去微信获取openid, ...
- 使用css鼠标移动到图片放大效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- jquery的封装与对象学习
1.封装学习 /// <reference path="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" /> ...