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 相关文章推荐
Extjs TriggerField在弹出窗口显示不出问题的解决方法
Jan 08 Javascript
Javascript倒计时代码
Aug 12 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
Dec 03 Javascript
javascript的原生方法获取数组中的最大(最小)值
Dec 19 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
May 12 Javascript
Three.js学习之几何形状
Aug 01 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
如何更好的编写js async函数
May 13 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 Javascript
小程序接入腾讯位置服务的详细流程
Mar 03 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
May 25 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
资料注册后发信小技巧
2006/10/09 PHP
php采集速度探究总结(原创)
2008/04/18 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
纯文字版返回顶端的js代码
2013/08/01 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
面包屑导航详解
2017/12/07 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
Python守护进程用法实例分析
2015/06/04 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
Python实现区域填充的示例代码
2021/02/03 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
开放系统互连参考模型
2016/06/29 面试题
恒华伟业笔试面试题
2015/02/26 面试题
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
趣味运动会加油词
2015/07/18 职场文书