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 相关文章推荐
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
javascript中日期转换成时间戳的小例子
Mar 21 Javascript
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
jQuery实现多级联动下拉列表查询框
Jan 18 Javascript
AngularJs expression详解及简单示例
Sep 01 Javascript
jquery动态添加文本并获取值的方法
Oct 12 Javascript
用headjs来管理和加载js 提高网站加载速度
Nov 29 Javascript
Vue 父子组件、组件间通信
Mar 08 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
Nov 30 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
JS+css3实现幻灯片轮播图
Aug 14 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
php通过ajax实现双击table修改内容
2014/04/28 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
PHP7 新增功能
2021/03/09 PHP
JS实现拖动示例代码
2013/11/01 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
Python制作CSDN免积分下载器
2015/03/10 Python
python实现在windows下操作word的方法
2015/04/28 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
一些.net面试题
2014/10/06 面试题
质检的岗位职责
2013/11/17 职场文书
家长会学生演讲稿
2014/04/26 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
2016春季运动会前导词
2015/11/25 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
Python OpenGL基本配置方式
2022/05/20 Python