vue中页面跳转拦截器的实现方法


Posted in Javascript onAugust 23, 2017

本文主要给大家介绍的是关于vue页面跳转拦截器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

登录拦截逻辑

第一步:路由拦截

首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录。如果用户已经登录,则顺利进入路由, 否则就进入登录页面。在路由管理页面添加meta字段

import Vue from 'vue'
import Router from 'vue-router'


Vue.use(Router)


const routes = [
 {
 path: '/',
 name: "欢迎",
 meta: {
   requireAuth: true, // 添加该字段,表示进入这个路由是需要登录的
  },
 component: resolve => require(["../components/Hello.vue"], resolve)
 },
 {
 path: '/login',
 name: "登录",
 /*meta: {
   requireAuth: false, // 添加该字段,表示进入这个路由是需要登录的
  },*/
 component: resolve => require(["../view/login/login.vue"], resolve)
 }
]


export default new Router({
 base: "/",
 routes
})

定义完路由后,我们主要是利用vue-router提供的钩子函数beforeEach()对路由进行判断。

所以在main.js加上

router.beforeEach((to, from, next) => {
 if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
  if (store.state.token) { // 通过vuex state获取当前的token是否存在
   next();
  }
  else {
   next({
    path: '/login',
    query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
   })
  }
 }
 else {
  next();
 }
})

每个钩子方法接收三个参数:

     * to: Route: 即将要进入的目标 路由对象

     * from: Route: 当前导航正要离开的路由

     * next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

     * next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

     * next(false): 中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

     * next(‘/') 或者 next({ path: ‘/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

确保要调用 next 方法,否则钩子就不会被 resolved。

其中,to.meta中是我们自定义的数据,其中就包括我们刚刚定义的requireAuth字段。通过这个字段来判断该路由是否需要登录权限。需要的话,同时当前应用不存在token,则跳转到登录页面,进行登录。登录成功后跳转到目标路由。

完成后,我们可以在登录页面。控制用户登录成功后,vuex的token状态改变就可以了

<script>
export default {
 methods:{
 login(){
  this.$store.commit('setToken','true');  //改变token状态
  let redirect = decodeURIComponent(this.$route.query.redirect || '/'); 获取登录成功后要跳转的路由。
  this.$router.push({
  path: redirect
  })
 }
 }
}
</script>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
改进:论坛UBB代码自动插入方式
Dec 22 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
Jan 16 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
Nov 07 Javascript
将数字转换成大写的人民币表达式的js函数
Sep 21 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
jQuery实现的图文高亮滚动切换特效实例
Aug 10 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
js密码强度校验
Nov 10 Javascript
基于JS实现省市联动效果代码分享
Jun 06 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
完美解决axios在ie下的兼容性问题
Mar 05 Javascript
vue渲染方式render和template的区别
Jun 05 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 #jQuery
Angular2+国际化方案(ngx-translate)的示例代码
Aug 23 #Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
Jun 17 #Javascript
简单实现jQuery上传图片显示预览功能
Jun 29 #jQuery
浅谈vue-lazyload实现的详细过程
Aug 22 #Javascript
关于定制FileField中的上传文件名称问题
Aug 22 #Javascript
React复制到剪贴板的示例代码
Aug 22 #Javascript
You might like
基于mysql的bbs设计(四)
2006/10/09 PHP
PHP读写文件的方法(生成HTML)
2006/11/27 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python实现识别手写数字大纲
2018/01/29 Python
python实现机器人行走效果
2018/01/29 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python进程池Pool应用实例分析
2019/11/27 Python
Python: 传递列表副本方式
2019/12/19 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
授权委托书范文
2014/07/31 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
Redis基本数据类型String常用操作命令
2022/06/01 Redis