vue的全局变量和全局拦截请求器的示例代码


Posted in Javascript onSeptember 13, 2018

做的产品证书管理系统使用的是VueJs和ElementUI,现将遇到的一些知识点记录一下。

VUe全局变量的实现

全局变量专用模块Global.vue是以一个特定模块来组织管理全局变量,需要引用的地方导入该模块即可。使用方法如下:
将全局变量模块挂载到Vue.prototype里,在程序入口的main.js里加下面代码:

import Global from '../components/Global.vue'
Vue.prototype.global = Global

挂载后,在需要引用全局变量的模块时,不需要再导入全局变量模块,直接用this引用即可。 如:this.global.notifySuccess()

Vue的全局请求拦截器

在全局变量专用模块Global.vue中设置全局Vue请求拦截器,以在全局拦截器中添加请求超时的方法为例,若请求超时则取消此次请求,并提示用户。请求超时设置通过拦截器Vue.http.interceptors实现具体代码如下

Vue.http.interceptors.push((request,next) => {
  let timeout
  // 如果某个请求设置了_timeout,那么超过该时间,该终端会(abort)请求,并执行请求设置的钩子函数onTimeout方法,不会执行then方法。
  if (request._timeout) {
   timeout = setTimeout(() =>{
    if (request.onTimeout) {
     request.onTimeout(request)
     request.abort()
     }
    }, request._timeout)
  }
  next((response) => {
   clearTimeout(timeout)
   return response
   })
 })

当页面中用到vue-resource请求的地方设置如下即可:

this.$http.get('url',{
    params:{.......},
    ......
    _timeout:3000,
    onTimeout: (request) => {
      alert("请求超时");
    }
  }).then((response)=>{
});

Vue的全局守卫

全局路由守卫是指在路由跳转时对登录状态进行检查。可以使用router.beforeEach注册一个全局前置守卫:

const router = new VueRouter({…})
Router.beforeEach((to,from,next)=> { …})

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫resolve完之前一直处于等待中。每个守卫方法接收三个参数:

  • to:Route即将要进入的目标,即路由对象;
  • from:Route当前导航正要离开的路由;
  • next:Function:一定要调用该方法来resolve这个钩子。执行效果依赖next方法的调用参数。

使用实例如下:

// 全局路由守卫,路由时检查用户是否登录,若无登录信息,指向登录界面
router.beforeEach((to, from, next) => {
  const nextRoute = ['AdminIndex','系统设置', '产品管理', '客户管理', '证书管理', '日志管理']
  if (nextRoute.indexOf(to.name)>= 0) {
    if (sessionStorage.getItem('username')){
      next()
    } else {
      window.location.replace('/login.html')
    }
  } else {
   next()
  }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS支持带x身份证号码验证函数
Aug 10 Javascript
Javascript Objects详解
Sep 04 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
jquery插件qrcode在线生成二维码
Apr 26 Javascript
JavaScript中的slice()方法使用详解
Jun 06 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
详解微信小程序Radio选中样式切换
Jul 06 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
Jul 10 Javascript
详解vue中引入stylus及报错解决方法
Sep 22 Javascript
vue全局组件与局部组件使用方法详解
Mar 29 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 #Javascript
vue interceptor 使用教程实例详解
Sep 13 #Javascript
Vue点击切换颜色的方法
Sep 13 #Javascript
node中的cookie的具体使用
Sep 13 #Javascript
vue动态改变背景图片demo分享
Sep 13 #Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
Sep 13 #Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
Sep 13 #Javascript
You might like
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
python批量解压zip文件的方法
2019/08/20 Python
python 自动识别并连接串口的实现
2021/01/19 Python
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
质检部岗位职责
2013/11/11 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
公司员工检讨书
2014/02/08 职场文书
材料会计岗位职责
2014/03/06 职场文书
物资采购方案
2014/06/12 职场文书
党员示范岗材料
2014/12/19 职场文书
捐书仪式主持词
2015/07/04 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
Golang 链表的学习和使用
2022/04/19 Golang