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与Ajax常用代码实现对比
Oct 03 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
May 27 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
Jan 06 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
react-router browserHistory刷新页面404问题解决方法
Dec 29 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
Mar 02 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
解决Layui中layer报错的问题
Sep 03 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
浅谈Python中的闭包
2015/07/08 Python
Python 常用string函数详解
2016/05/30 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
Python中如何引入第三方模块
2020/05/27 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
Python list和str互转的实现示例
2020/11/16 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
办公室人员先进事迹
2014/01/27 职场文书
客户接待方案
2014/02/26 职场文书
病媒生物防治方案
2014/05/13 职场文书
积极向上的团队口号
2014/06/06 职场文书
学校运动会感想
2015/08/10 职场文书
javaScript Array api梳理
2021/03/31 Javascript
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
Nginx配置https的实现
2021/11/27 Servers
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers