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 相关文章推荐
ztree获取当前选中节点子节点id集合的方法
Feb 12 Javascript
JavaScript数组前面插入元素的方法
Apr 06 Javascript
js判断浏览器类型及设备(移动页面开发)
Jul 30 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
Jun 02 Javascript
javascript用rem来做响应式开发
Jan 13 Javascript
如何用RxJS实现Redux Form
Dec 29 Javascript
node之本地服务器图片上传的方法示例
Mar 26 Javascript
Vue路由前后端设计总结
Aug 06 Javascript
JS实现灯泡开关特效
Mar 30 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 Javascript
解决iView Table组件宽度只变大不变小的问题
Nov 13 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预定义常量
2006/12/25 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
numpy中的高维数组转置实例
2018/04/17 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
求职信模版
2013/11/30 职场文书
单位成立周年感言
2014/01/26 职场文书
学生会招新策划书
2014/02/14 职场文书
南京青奥会口号
2014/06/12 职场文书
经济贸易系求职信
2014/08/04 职场文书