Vue-router浅析(二)
一、导航守卫
经常在项目中,会对页面做一些权限控制,所以需要对路由变化做出处理,跳转或取消相应的路由。
导航:即路由发生变化。导航守卫即对路由变化做出处理。当然也分几种情况:对全局变化做处理、对“单个路由独享”变化做处理、对组件级(即具体的某个组件内部)变化做处理。
特别注意点:当参数或者查询发生变化的时候,并不会触发进入/离开的导航路由。这个可以参考上一篇博客的“响应路由参数的变化”,来监听$route对象或者使用beforeRouteUpdate
的组件内守卫。
(一)对全局变化做处理的守卫
1.全局前置守卫(route.beforeEach)
首先可以使用route.beforeEach()来注册一个全局前置守卫。
var router = new VueRouter({
...//
})
router.beforeEach((to,from,next) => {
})
下面解释下beforeEach方法的参数,之前在看Vue-router的时候,自己没有亲身实践过,对其中的参数含义理解模糊,果然还是需要实际操作才会记得住。
- to:这是即将要进入的某个路由对象
- from:指的是即将离开的某个路由对象
- next:这是必须的,因为如果没有它,那么路由会停滞在当前页面,不会往后执行并变化相应的路由。
next():指的是进入即将要进入的某个路由对象;next(false):指的是中断当前路由,重置回from的路由对象的url;next('/')或者next({path: '/'})指的是跳转至另一个想要进入的路由地址或者路由对象。
2.全局解析守卫(route.beforeResolve((to,from,next) => {}))
这是另一个类似于route.beforeEach的全局守卫方法。区别在于它会在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用。
3.全局后置钩子(route.afterEach((to,from) => {}))
这个导航守卫的参数虽然没有next,指的是不会改变导航本身。进入路由之后调用。
(二)对“单个路由独享”变化做处理的守卫
1.可以直接在路由配置上定义beforeEnter守卫
const router = new VueRouter({
routes: [
{
path: 'foo',
component: Foo,
beforeEnter: (to,from,next) => {
...//
}
}
]
})
beforeEnter守卫的参数与beforeEach守卫的参数一致。
(三)对组件级变化做处理
面向于组件级,指的就是在组件内部使用的守卫方法,主要有beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave三个方法。这三个方法的使用场景如下。
- beforeRouteEnter:顾名思义,在route进入之前进行调用,一般是对权限做控制。
- beforeRouteUpdate:指的是路由在变化的时候,既然是组件内部,那么就是针对于多个路由映射同一个组件的情况,就是params发生变化,例如/foo/1变化为/foo/2
- beforeRouteLeave:指的是离开某个路由之前,通常应用在禁止用户离开页面,或者用户在未保存时提示用户等。
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 因为当守卫执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
}
}
注意:虽然beforeRouteEnter,不能访问实例this
Vue-router浅析(二)的更多相关文章
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
- [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制
一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...
- Vue小项目二手书商城:(五)参考资料
本项目基于vue2.5.2,如有错误,望指正. 完整程序:https://github.com/M-M-Monica/bukesi Vue.js官方文档:https://cn.vuejs.org/v2 ...
- Vue小项目二手书商城:(一)准备工作、组件和路由
本项目基于vue2.5.2,与低版本部分不同之处会在(五)参考资料中提出 完整程序:https://github.com/M-M-Monica/bukesi 实现内容: 资源准备(mock数据) 组件 ...
- Vue Router学习笔记
前端的路由:一个地址对应一个组件 Vue Router中文文档 一.路由基本使用 第1步:导入Vue Router: <script src="https://unpkg.com/vu ...
- 深入浅出的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的懒加载路径
单页应用产出的入口chunk大小随着业务的复杂度线性增加,导致后期加载速度越来越慢.后面就需要对不同路径下的模块进行拆分,打包到相应的chunk下,按需加载,找到chunk的大小.个数和页面加载速度的 ...
- Vue Router的入门以及简单使用
Vue Router 是Vue官方的路由管理器,是Vue用来实现SPA的插件.它和 Vue.js 的核心深度集成,让构建单页面应用(SPA)变得易如反掌. 基本概念: 路由:是一种映射关系,是 “pa ...
- vue.js利用vue.router创建前端路由
node.js方式: 利用node.js安装vue-router模块 cnpm install vue-router 安装完成后我们引入这个模板! 下载vue-router利用script引入方式: ...
随机推荐
- skb_pull skb_push skb_put
unsigned char *skb_pull(struct sk_buff *skb, int len)该函数将 data 指针向数据区的末尾移动,减少了len 字段的长度.该函数可用于从接收到的数 ...
- 金蝶K3物料选择问题(感觉Ctrl被按住了一样)
金蝶K3在进入物料选择时,有时需要用Ctrl才可以进行多选,为什么有时不用Ctrl也可以进行多选,就像Ctrl被按住了一样? 解决:在物料选择界面按2次ctrl键单击物料可实现多选,再按2次ctrl则 ...
- Django的ContentType框架django_conent_type
Django包含了一个conenttype应用程序,记录了Django项目中安装的所有模型,为当前项目所有基于Django驱动的model提供了更高层次的抽象接口. 一.概述 ContentTypes ...
- 使用DOS访问数据库详解
今天突发奇想,想是否可以用DOS命令来操作本地数据库或者连接其他外地数据库,网上搜了很多教程比较繁琐,自己想写一篇文章详细叙述一下,也为以后复习做点备份. 工具: 电脑 win7 64bit MySQ ...
- [转] Cacti+Nagios监控平台完美整合
Cacti+Nagios监控平台完美整合 http://os.51cto.com/art/201411/458006.htm 整合nagios+cacti+微信.飞信实现网络监控报警 http://b ...
- wpf设置某容器透明,而不应用到容器的子元素的方法
以Border打比方: <Border.Background> <SolidColorBrush Opacity="0.4" Color="Black& ...
- 让你的 JMeter 像 LoadRunner 那样实时查看每秒事务数(TPS)、事务响应时间(TRT)
熟悉 LoadRunner 的朋友一定不会对其 TPS(每秒事务数).TRT(事务响应时间) 等视图感到陌生,因为这是压力测试最为关键的两个指标.JMeter 以其开源.轻巧.灵活.扩展性高等特性赢得 ...
- SQL SERVER 比较两个数据库中表和字段的差异
在开发过程中线上的数据库表字段和本地数据库表字段是存在的,也许我们在本地数据库中所增加的表字段都会有记录到SQL文件中,但当增加的表及字段名称较多时总会出现漏网之鱼,发布真是版本的时候回出现很多很多的 ...
- android拾遗——四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...
- 矩阵链乘(UVa 442)
结构体 struct matrix 用来保存矩阵的行和列: map<string,matrix> 用来保存矩阵名和相应的行列数: stack<string> 用来保存表达式中遇 ...