Vue-router浅识
一、router-link及router-view
:用来做导航,通过传入to属性来指定链接
:用来做路由出口,路由匹配到的组件都会渲染在这里
const router = new VueRouter({
routes //相当于routes: routes
})
// 将router配置注入路由从而让整个应用具有路由功能
new Vue({
router,
store,
render: h => h(App)
}).$mount("#app");
我们可以通过this.$router来访问路由器,然后通过this.$route来访问当前路由。
二、动态路由标记
1.作用
动态路由标记的多个不同的路由映射到同一个组件。路由中需要夹杂路由参数,例如/user/:id
,冒号是路由参数的标志。当匹配到一个路径的时候,参数值会被设置到this.$route.params
,可以在每个组件内使用。
2.响应路由参数的变化
当使用路由参数,即动态路由的时候,因为这时候不同的路由映射的是同一个组件,那么这个组件将会被复用,而不是销毁后再创建,这也意味着组件的生命周期钩子将不会被调用
但是某些时候,我们复用组件的时候,可能想对路由参数的变化做出响应,可以简单地监测(watch)$route对象或者使用2.2版本中引入的beforeRouteUpdate
导航守卫。导航守卫类似method属性,直接在对象中当做属性加入。当然路径中也可以使用通配符,路由中使用了,那么$route.params内部会自动添加一个参数pathMatch,它包含了URL通过通配符被匹配的部分。
三、嵌套路由
实际项目中的页面,通常是通过多个嵌套的组件组成。所以顶层组件就渲染最高级出口,当然某个组件内也拥有自己的
<div id="app">
<router-view></router-view>
</div>
// User组件
const User = {
template: '<div>User {{ $route.params.id }}</div>'
}
// router
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User }
]
})
// User组件内部加入<router-view></router-view>
const User = {
template: `
<div class="user">
<h2>User {{ $route.params.id }}</h2>
<router-view></router-view>
</div>
`
}
// 想在嵌套的出口中渲染组件,需要在VueRouter的参数中配置children
const router = new VueRouter({
routes: [
{ path: '/user/:id', component: User,
children: [
{
// 当 /user/:id/profile 匹配成功,
// UserProfile 会被渲染在 User 的 <router-view> 中
path: 'profil9e',
component: UserProfile
},
{
// 当 /user/:id/posts 匹配成功
// UserPosts 会被渲染在 User 的 <router-view> 中
path: 'posts',
component: UserPosts
}
]
}
]
})
// 当只访问"/user/foo"时,没有匹配任何路由,所以User内部的<router-view></router-view>不会渲染什么,所以这时候需要创建一个空路径,并映射到一个组件。
{
path:" ",
component: UserHome
}
四、编程式的导航
除了使用创建a标签来定义导航链接。我们还可以借助router的实例方法,来通过编程实现。
主要的编程实现方法有:
- router.push(location,?onComplete,?onAbort)
- router.replace(location,?onComplete,?onAbort)
- router.go(n)
1.router.push
使用router.push方法,会向history栈中添加一个新的记录。当用户点击浏览器的前进后退按钮时,会导航到相应的url。
当你点击中的a标签时,相当于执行router.push方法。
1.1此方法的参数:location,onComplete,onAbort
- location:这个参数可以直接使用字符串路径或者一个描述地址的对象
router.push('home')
router.push({path:'home'})
router.push({name:'user', params: {userId: '123'}})
router.push({path:'register', query: {id: '34'}}) //带查询参数,变为"/register?id=34"
注意:如果提供了path,那么params会被忽略,上述例子query不属于这种情况。如果想提供参数params,那么可以使用name,不能使用path,因为params在path存在情况下都会失效。如果要使用path,还想加入参数,那么必须手写完整的带参数的path。
const userId = '123'
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user
同样的规则同样适用于router-link的to属性。
在 2.2.0+,可选的在 router.push 或 router.replace 中提供 onComplete 和 onAbort 回调作为第二个和第三个参数。这些回调将会在导航成功完成 (在所有的异步钩子被解析之后) 或终止 (导航到相同的路由、或在当前导航完成之前导航到另一个不同的路由) 的时候进行相应的调用
2.router.replace(location,?onComplete,?onAbort)
跟router.push功能类似,唯一的区别是它不会向history栈中添加一个记录,而是去替换history栈中的当前记录。
3.router.go(n)
n是一个整数,n为正整数时,表示向前跳转n步,相反向后跳转n步,超出history栈中的记录时,跳转失效。
五、命名路由
即对VueRouter配置中的routes中的某个路由对象添加name属性,使其成为带有名字的路由。
当你需要链接到一个路由,则需要对中的to赋值一个对象。
const router = new VueRouter({
routes: [
{
path: '/user/:userId',
name: 'user',
component: User
}
]
})
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
上述代码和router.push({ name: 'user', params: { userId: 123 }})作用类似。
六、命名视图
有时候想同级展示多个视图,而不是嵌套展示。一个路由下想展示多个视图,则需要多个组件。
<router-view class="view one"></router-view>
<router-view class="view two" name="a"></router-view>
<router-view class="view three" name="b"></router-view>
const router = new VueRouter({
routes: [
{
path: '/',
components: {
default: Foo,
a: Bar,
b: Baz
}
}
]
})
七、重定向和别名
const router = new VueRouter({
routes: [
{ path: '/a', redirect: '/b' }
]
})
Vue-router浅识的更多相关文章
- Vue 2.0 + Vue Router + Vuex
用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...
- vue router 只需要这么几步
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Vue.js 2.x笔记:路由Vue Router(6)
1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...
- Vue Router学习笔记
前端的路由:一个地址对应一个组件 Vue Router中文文档 一.路由基本使用 第1步:导入Vue Router: <script src="https://unpkg.com/vu ...
- vue router.push(),router.replace(),router.go()和router.replace后需要返回两次的问题
转载:https://www.cnblogs.com/lwwen/p/7245083.html https://blog.csdn.net/qq_15385627/article/details/83 ...
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
- 深入浅出的webpack4构建工具---webpack+vue+router 按需加载页面(十五)
1. 为什么需要按需加载? 对于vue单页应用来讲,我们常见的做法把页面上所有的代码都打包到一个bundle.js文件内,但是随着项目越来越大,文件越来越多的情况下,那么bundle.js文件也会越来 ...
- 深入浅出的webpack构建工具--webpack4+vue+router项目架构(十四)
阅读目录 一:vue-router是什么? 二:vue-router的实现原理 三:vue-router使用及代码配置 四:理解vue设置路由导航的两种方法. 五:理解动态路由和命名视图 六:理解嵌套 ...
- python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)
昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...
- vue router 跳转到新的窗口方法
在CreateSendView2.vue 组件中的方法定义点击事件,vue router 跳转新的窗口通过采用如下的方法可以实现传递参数跳转相应的页面goEditor: function (index ...
随机推荐
- Python图片验证码降噪 — 8邻域降噪
简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 1.灰度处理&二值化 2.降噪 3.字符分割 4.标准化 5.识别 所谓降噪就是把不需 ...
- Python标准库笔记(8) — pprint模块
struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串. Python版本: 2.x & 3.x 该模块作用是完成Python数值和C语言结构体的Pyt ...
- Jenkins无法安装插件或首次安装插件界面提示Offline
一.首先点击系统管理 二.点击插件管理 三.选择高级管理 四.将升级站点中的https改成http即可
- 四、springcloud之服务调用Feign(二)
一.Fegin的常见应用 Feign的Encoder.Decoder和ErrorDecoder Feign将方法签名中方法参数对象序列化为请求参数放到HTTP请求中的过程,是由编码器(Encoder) ...
- Visual Studio 2017 for Mac
Visual Studio 2017 for Mac Last Update: 2017/6/16 我们非常荣幸地宣布 Visual Studio 2017 for Mac 现已推出. Visual ...
- springboot配置fastjson后端往前端传输格式化
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.Spri ...
- Nginx - keepliave 相关知识点
目录 - 1. 前言- 2. keepalive 介绍- 3. Nginx 与 keepalive 的关系 - 3.1 Nginx - keepalive_timeout - 3.2 Ng ...
- java基础20 StringBuffer缓冲类
1.概要 StringBuffer 其实就是一个存储字符的容器 字符串特点:字符串是常量;它们创建之后不能更改了字符串一旦发生变化,那么立马创建一个新的对象.注意:字符串的内容不适合频繁修改的,因为一 ...
- B树 B+树 红黑树
B-Tree(B树) 具体讲解之前,有一点,再次强调下:B-树,即为B树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解. ...
- Linux学习笔记:cat、tac、more、less、head、tail查看文件内容
Linux下查看文件内容可以通过以下命令: cat tac more less head tail nl tailf 1.cat 由第一行开始显示内容,并将所有内容输出.当文件过大时,使用cat查看不 ...