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 相关文章推荐
Add a Table to a Word Document
Jun 15 Javascript
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
js字符串转成JSON
Nov 07 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
Mar 13 Javascript
JavaScript各类型的关系图解
Oct 16 Javascript
JSONP原理及简单实现
Jun 08 Javascript
react 中父组件与子组件双向绑定问题
May 20 Javascript
HTML+JavaScript实现扫雷小游戏
Sep 30 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
element的el-table中记录滚动条位置的示例代码
Nov 06 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 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
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
JavaScript学习历程和心得小结
2010/08/16 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
javascript的BOM汇总
2015/07/16 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
python实现桌面托盘气泡提示
2019/07/29 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python识别处理照片中的条形码
2020/11/16 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers