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 操作select标签实现代码
May 14 Javascript
javascript instanceof 内部机制探析
Oct 15 Javascript
浅析JavaScript动画
Jun 10 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
jQuery实现手机自定义弹出输入框
Jun 13 Javascript
基于Three.js插件制作360度全景图
Nov 29 Javascript
微信小程序 template模板详解及实例
Feb 21 Javascript
JS实现加载和读取XML文件的方法详解
Apr 24 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
Nov 25 Javascript
js针对图片加载失败的处理方法分析
Aug 24 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
Nov 20 Javascript
浅谈JavaScript节流和防抖函数
Aug 25 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 压缩文件夹的类代码
2009/11/05 PHP
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
PHP中的float类型使用说明
2010/07/27 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
javascript整除实现代码
2010/11/23 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python的re模块正则表达式操作
2016/05/25 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python 移动光标位置的方法
2019/01/20 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
Python argparse模块应用实例解析
2019/11/15 Python
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
Java版 单机五子棋
2022/05/04 Java/Android