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 事件属性绑定带参数的函数
Mar 13 Javascript
javascript 操作文件 实现方法小结
Jul 02 Javascript
js实现特定位取反原理及示例
Jun 30 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
Sep 27 Javascript
JS中事件冒泡和事件捕获介绍
Dec 13 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
JavaScript实现的select点菜功能示例
Jan 16 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
Apr 12 Javascript
vuex中使用对象展开运算符的示例
Sep 25 Javascript
JS实现多物体运动的方法详解
Jan 23 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 Javascript
React列表栏及购物车组件使用详解
Jun 28 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
PHP4实际应用经验篇(9)
2006/10/09 PHP
php 破解防盗链图片函数
2008/12/09 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
JQuery toggle使用分析
2009/11/16 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
Python sorted对list和dict排序
2020/06/09 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
会计专业应届生求职信
2013/11/24 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
致400米运动员广播稿
2014/02/07 职场文书
党员检讨书范文
2014/12/27 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python