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 相关文章推荐
摘自百度的图片轮换效果代码
Nov 19 Javascript
JQuery 无废话系列教程(二) jquery实战篇上
Jun 23 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
js中继承的几种用法总结(apply,call,prototype)
Dec 26 Javascript
JavaScript中判断两个字符串是否相等的方法
Jul 07 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
Sep 27 Javascript
AngularJS directive返回对象属性详解
Mar 28 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
Aug 06 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
4个顶级开源JavaScript图表库
Sep 29 Javascript
vue 实现input表单元素的disabled示例
Oct 28 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
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
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
python 正则式使用心得
2009/05/07 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
对numpy中轴与维度的理解
2018/04/18 Python
Python lambda表达式用法实例分析
2018/12/25 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
高一新生军训方案
2014/05/12 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
Python+Tkinter打造签名设计工具
2022/04/01 Python
Java的Object类的九种方法
2022/04/13 Java/Android