视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue的全局变量和全局拦截请求器的示例代码
2020-11-27 22:07:51 责编:小采
文档

做的产品证书管理系统使用的是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()
     }
    })

    下载本文
    显示全文
    专题