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 相关文章推荐
js资料toString 方法
Mar 13 Javascript
JavaScript asp.net 获取当前超链接中的文本
Apr 14 Javascript
图片延迟加载的实现代码(模仿懒惰)
Mar 29 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
当前流行的JavaScript代码风格指南
Sep 10 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
jQuery实现区域打印功能代码详解
Jun 17 Javascript
详解js树形控件—zTree使用总结
Dec 28 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
Mar 10 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
Nov 06 Javascript
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
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
使用无限生命期Session的方法
2006/10/09 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
php 动态添加记录
2009/03/10 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
9个PHP开发常用功能函数小结
2011/07/15 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
jQuery操作cookie
2016/08/08 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
Python素数检测实例分析
2015/06/15 Python
浅析使用Python操作文件
2017/07/31 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Django视图、传参和forms验证操作
2020/07/15 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
中学生演讲稿
2014/04/26 职场文书
企业管理标语
2014/06/10 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
js 数组 fill() 填充方法
2021/11/02 Javascript
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server