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陷阱清单
May 31 Javascript
$.get获取一个文件的内容示例代码
Sep 11 Javascript
JavaScript DOM事件(笔记)
Apr 08 Javascript
跟我学习javascript的函数和函数表达式
Nov 16 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
Aug 19 Javascript
JS 动态判断PC和手机浏览器实现代码
Sep 21 Javascript
jQuery实现发送验证码并60秒倒计时功能
Nov 25 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
Jan 18 Javascript
React Native之TextInput组件解析示例
Aug 22 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
Oct 12 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 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初学者们头痛的十四个问题
2007/01/15 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
网站上面有这种切换效果
2006/06/26 Javascript
javascript常用方法汇总
2014/12/02 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
关于Java String的一道面试题
2013/09/29 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
班主任对学生的评语
2014/04/26 职场文书
读书之星事迹材料
2014/05/12 职场文书
财务工作失职检讨书
2014/11/21 职场文书
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android