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 相关文章推荐
javascript 类方法定义还是有点区别
Apr 15 Javascript
JQuery Tab选项卡效果代码改进版
Apr 01 Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 Javascript
JS写的贪吃蛇游戏(个人练习)
Jul 08 Javascript
JS字符串处理实例代码
Aug 05 Javascript
javascript使用appendChild追加节点实例
Jan 12 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
Dec 24 Javascript
JavaScript中的this使用详解
Jul 27 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
Aug 23 Javascript
Vue 实现列表动态添加和删除的两种方法小结
Sep 07 Javascript
vue微信分享到朋友圈 vue微信发送给好友
Nov 28 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 遍历XP文件夹下所有文件
2008/11/27 PHP
php 数组的一个悲剧?
2011/05/11 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
YII框架常用技巧总结
2019/04/27 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
Django如何自定义分页
2018/09/25 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
python 模拟登陆github的示例
2020/12/04 Python
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
新教师教学工作总结
2015/08/12 职场文书
养成教育工作总结
2015/08/13 职场文书
教学副校长工作总结
2015/08/13 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
高中班主任寄语
2019/06/21 职场文书
Element实现动态表格的示例代码
2021/08/02 Javascript
Python socket如何解析HTTP请求内容
2022/02/12 Python