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 EasyUI API 中文文档 - Panel面板
Sep 30 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
Aug 10 Javascript
js实现div弹出层的方法
Nov 20 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 Javascript
Vue实现push数组并删除的例子
Nov 01 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
Nov 13 Javascript
js实现简单放大镜效果
Mar 07 Javascript
详解vue3.0 diff算法的使用(超详细)
Jul 01 Javascript
vue实现拖拽进度条
Mar 01 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
详解python和matlab的优势与区别
2019/06/28 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
领导失职检讨书
2014/02/24 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
地球一小时倡议书
2014/04/15 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
2014年文秘工作总结
2014/11/25 职场文书
个人租房协议书
2014/11/28 职场文书
模范班主任事迹材料
2014/12/17 职场文书
会计主管竞聘书
2015/09/15 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python