vue中路由验证和相应拦截的使用详解


Posted in Javascript onDecember 13, 2017

在web项目中,经常需要根据是否登录进行路由的验证和相应的拦截。

首先,在vuex里的store.js里边写一个存放登录状态,代码如下

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
 state: {
 user: false
 },
 mutations: {
 // 登录
 login (state, user) {
  state.user = user
 },
 // 退出
 logout (state, user) {
  state.user = false
 }
 }
})

路由验证:       

      路由验证用  router.beforeEach( (to, from, next) => {  } 
      这里的to代表要去的路由指向,from是指从哪个路由跳转过来的,next是判断操作,如果为空,表示放行。
      比如:下一跳的路由为‘/watchHouse'或者‘/AgentMsg' ,如果没有登录的话,通过代码 next ({path: '/login'})

跳转到登录的界面。代码如下:

if (!store.state.user && (to.path === '/watchHouse' || to.path === '/AgentMsg')) {
 next({ path: '/login' })
}

比如:在路由‘/my'下,要跳往 ‘/ToolCompute',如果没有登录的话,跳转到登录页面。代码如下:    

if (!store.state.user && (from.path === '/my') && (to.path === '/ToolCompute')) {
 next({ path: '/login' })
}

全部代码:

router.beforeEach((to, from, next) => {
 if (to.path === '/login') {
 next()
 } else {
 if (!store.state.user && (to.path === '/watchHouse' || to.path === '/AgentMsg')) {
  next({ path: '/login' })
 } else {
  next()
 }
 if (!store.state.user && (from.path === '/my') && (to.path === '/ToolCompute')) {
  next({ path: '/login' })
 }
 }
})

需要注意的是,路由验证这个方法函数与vue实例的顺序还有关系。如果写在vue()的后面,下面就会执行,后判断。

如下图所示:

vue中路由验证和相应拦截的使用详解

这样写,当然是可以执行的路由跳转判断的,但是当我们直接在浏览器的地址栏里直接输入我们要跳转的

完整路由信息的时候,这个路由跳转就不会被判断了。如下图所示:

vue中路由验证和相应拦截的使用详解

如果把路由验证写到VUE实例的前面,就不会出现这样的问题了,这样就会先进行路由判断,再进行执行实例里边的内容了。

代码顺序如下所示:

vue中路由验证和相应拦截的使用详解

响应拦截:比如在根实例中通过checkLogin()这个方法去判断,登录信息 的状态,加入登录超时,则进行响应拦截,代码如下。

var app=new Vue({
 el: '#app',
 router,
 store,
 created(){
 checkLogin().then(function (res) {
  if(res.data&&res.data.code==1){
  store.commit('login',true);
  }
  else{
  router.push('/watchHouse-css');
  }
 })
 },
 template: '<App/>',
 components: { App }
})


//响应拦截器
axios.interceptors.response.use(function(res){
 //如果是未登录
 if(res.data&&res.data.code==2){
 app.$alert('登录用户已超时,请重新登录', '提示', {
  confirmButtonText: '确定',
  type:'warning',
  closeOnClickModal:false,
  callback: action => {
  router.push('/watchHouse-css')
  }
 });
 }
 return res;
},function(err){
 return Promise.reject(err);
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 最近浏览过的商品的功能实现代码
May 14 Javascript
在javascript将NodeList作为Array数组处理的方法
Jul 09 Javascript
jquery 插件开发备注
Aug 27 Javascript
jQuery 一个图片切换的插件
Oct 09 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
Jan 26 Javascript
jquery退出each循环的写法
Feb 26 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
Sep 10 Javascript
每天一篇javascript学习小结(Function对象)
Nov 16 Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 Javascript
jQuery 获取多选框的值及多选框中文的函数
May 16 Javascript
原生 JS Ajax,GET和POST 请求实例代码
Jun 08 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
Aug 11 Javascript
vue实现nav导航栏的方法
Dec 13 #Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 #Javascript
仿京东快报向上滚动的实例
Dec 13 #Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 #Javascript
vue-router路由懒加载和权限控制详解
Dec 13 #Javascript
JS+canvas画一个圆锥实例代码
Dec 13 #Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 #Javascript
You might like
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
php实现可逆加密的方法
2015/08/11 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
python实现发送和获取手机短信验证码
2016/01/15 Python
手把手教你python实现SVM算法
2017/12/27 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
django静态文件加载的方法
2018/05/20 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
python实现宿舍管理系统
2019/11/22 Python
Python with语句和过程抽取思想
2019/12/23 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
英语国培研修感言
2014/02/13 职场文书
社区戒毒工作方案
2014/06/04 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
初中数学教学随笔
2015/08/15 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis