博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue 配置了全局的http拦截器,单独某个组件不需要这个拦截器,如何设置
阅读量:5973 次
发布时间:2019-06-19

本文共 3639 字,大约阅读时间需要 12 分钟。

之前写过关于全局配置http拦截器的随笔,现在有个需求,在微信支付时,生成二维码,页面显示一个遮罩层,二维码页面需要每两秒请求一次接口,若返回结果为已支付,则进行页面跳转,但因为全局http中loading的存在,每两秒遮罩会闪动一次,所以此处需要配置不显示loading。

解决思路是:

1.全局声明了一个变量isShowLoading: true;

2.全局的http.js引入声明全局变量的js文件,并在http拦截器中判断isShowLoading是否为true,如果是,则加载loading

3.在main.js中引入声明全局变量的js文件,并在生成二维码的页面将isShowLoading赋值为false,当用户关闭二维码或支付成功后跳转页面时,将isShowLoading再赋值为true,完成

相关代码:(红色为重点代码)

1.http.js中相关代码

import Axios from 'axios'import router from './router'import { Loading, Message, MessageBox } from 'element-ui'import common from './assets/js/common'//引用模块进来// 超时时间Axios.defaults.timeout = 5000Axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';Axios.defaults.withCredentials = trueAxios.defaults.baseURL = "https://www.chaopengjiankang.com/api"// http请求拦截器    var loadinginstaceAxios.interceptors.request.use(config => {    config.headers = {        'Content-Type': 'application/json'     }       // element ui Loading方法       if(common.isShowLoading == true){
loadinginstace = Loading.service({ fullscreen: true }) } return config}, error => { loadinginstace.close(); Message.error({ message: '网络不给力,请稍后再试' }) return Promise.reject(error)})

2.main.js中全局引入

import Common from './assets/js/common'Vue.prototype.common = Common;

3.局部组件中修改状态值

        //打开微信支付页面                if(index == 0){                    this.$axios.post("/wxPay/unifiedorder",{                        "orderId": this.orderId                    }).then((response) => {                        let res = response.data;                        if(res.code == 0){                            this.$refs.wx_mask.style.display = 'block';                            this.wxUrl = res.data;                            this.qrcode();//绘制二维码                            this.common.isShowLoading = false;//打开二维码,且未支付时关闭http拦截的loading                            //判断是否支付,进行跳转                            var count_downtimer =  setInterval(()=>{                                this.$axios.post("/wxPay/checkOrderIsPay",{                                    "orderId":this.orderId                                })                                .then((response) => {                                    this.common.isShowLoading = false;                                    let res = response.data;                                    if(res.code == 0) {                                        //支付成功                                        if(res.data == 1){                                            this.$router.push({name: 'paySuccess'});                                            clearInterval(count_downtimer);                                            this.common.isShowLoading = true;//开启http拦截的loading                                        }                         //手动关闭二维码                                        if(this.$refs.wx_mask.style.display == 'none'){                                            clearInterval(count_downtimer);                                            this.common.isShowLoading = true;//关掉二维码后重新开始进行http拦截,显示loading                                        }                                    }else{                                        this.$layer.msg(res.msg);                                    }                                }).catch((err) => {                                    console.log(err);                                })                            }, 2000);                        }                    }).catch((err) =>{                        console.log("微信支付失败",err);                    })

这个方法看起来有点麻烦,不过效果实现了。希望以后能找到简便的方式

 

转载于:https://www.cnblogs.com/duanzhenzhen/p/10735772.html

你可能感兴趣的文章
从月薪5k到5w的过来人 给大学生程序员们的一点建议
查看>>
Android开发之 .9PNG 的使用
查看>>
设计模式——单例模式
查看>>
D2 日报 2019年5月8日
查看>>
SpringBoot系列之服务端解析客户端国际化请求
查看>>
“===” 也有不靠谱的时候
查看>>
聊聊elasticsearch的MembershipAction
查看>>
JavaScript 周报
查看>>
MySQL 中 update 修改数据与原数据相同会再次执行吗?
查看>>
JVM的类加载(为面试做准备)
查看>>
浅析三大图书回收平台,如何最优(gui)的回收二手图书
查看>>
数据结构 第1讲 基础知识
查看>>
飞冰 2.0 正式发布并支持 Vue 项目开发
查看>>
多线程面试必备基础知识汇总
查看>>
JavaScript实现在线MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程序员在线工具网...
查看>>
vuex入门篇 -- state和getters
查看>>
美国国际消费电子展“牵动”中国产业链
查看>>
iOS学习笔记04 视图切换
查看>>
武汉区块链软件技术公司:区块链和比特币
查看>>
锚链接加动画
查看>>