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 相关文章推荐
根据地区不同显示时间的javascript代码
Aug 13 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
Jul 30 Javascript
基于jquery的地址栏射击游戏代码
Mar 10 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
Jul 18 Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 Javascript
移动端手指放大缩小插件与js源码
May 22 Javascript
详解微信小程序Radio选中样式切换
Jul 06 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
koa router 多文件引入的方法示例
May 22 Javascript
详解如何在JS代码中消灭for循环
Dec 11 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
原生JS实现飞机大战小游戏
Jun 09 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
php实现字符串反转输出的方法
2015/03/14 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python中单下划线_的常见用法总结
2018/07/10 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
美国网上书店:Barnes & Noble
2018/08/15 全球购物
11月升旗仪式讲话稿
2014/02/15 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
苏州园林导游词
2015/02/03 职场文书
Mysql文件存储图文详解
2021/06/01 MySQL
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
python3操作redis实现List列表实例
2021/08/04 Python