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 相关文章推荐
选择器中含有空格在使用示例及注意事项
Jul 31 Javascript
简单的两种Extjs formpanel加载数据的方式
Nov 09 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 Javascript
JavaScript面向对象编程入门教程
Apr 16 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
Apr 26 Javascript
AngularJS使用ng-repeat指令实现下拉框
Aug 23 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
Vue组件模板的几种书写形式(3种)
Feb 19 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
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php数组合并的二种方法
2014/03/21 PHP
Yii框架form表单用法实例
2014/12/04 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
Python中super()函数简介及用法分享
2016/07/11 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
Python进行特征提取的示例代码
2020/10/15 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
百度软件工程师职位
2013/02/14 面试题
中英文自我评价语句
2013/12/20 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
安全协议书范本
2014/04/21 职场文书
精神文明建设标语
2014/06/16 职场文书
2014年应急工作总结
2014/12/11 职场文书
投诉书格式范本
2015/07/02 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
深入浅析Django MTV模式
2021/09/04 Python
redis数据一致性的实现示例
2022/03/18 Redis
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android