vue 配置了全局的http拦截器,单独某个组件不需要这个拦截器,如何设置
之前写过关于全局配置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 = 5000
Axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
Axios.defaults.withCredentials = true
Axios.defaults.baseURL = "https://www.chaopengjiankang.com/api"
// http请求拦截器 var loadinginstace
Axios.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);
})
这个方法看起来有点麻烦,不过效果实现了。希望以后能找到简便的方式
vue 配置了全局的http拦截器,单独某个组件不需要这个拦截器,如何设置的更多相关文章
- Vue基础(环境配置、内部指令、全局API、选项、内置组件)
1.环境配置 安装VsCode 安装包管理工具:直接下载 NodeJS 进行安装即可,NodeJS自带 Npm 包管理工具,下载地址:https://nodejs.org/en/download/安装 ...
- springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置
web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...
- Flume自定义拦截器(Interceptors)或自带拦截器时的一些经验技巧总结(图文详解)
不多说,直接上干货! 一.自定义拦截器类型必须是:类全名$内部类名,其实就是内部类名称 如:zhouls.bigdata.MySearchAndReplaceInterceptor$Builder 二 ...
- 【SpringCloud】Ribbon如何自定义客户端配置和全局配置
起因 事情的起因是这样的,公司内部要实现基于Zuul网关的灰度路由,在上线时进行灰度测试,故需要配置业务微服务向Eureka注册的metadata元数据,和自定义Ribbon的负载规则达到只访问灰度服 ...
- Vue自动化注册全局组件脚本
今天有一个idea,vue一些组件,可能会全局都用到,我觉得在main.js写 Vue.component(name, instance) 然后很命令式,写着也不好看,想着能够有一个函数可以指定加载比 ...
- 项目前端 - vue配置 | axios配置 | cookies配置 | element-ui配置 | bootstrap配置
vue项目创建 环境 1.傻瓜式安装node: 官网下载:https://nodejs.org/zh-cn/ 2.安装cnpm: >: npm install -g cnpm --regis ...
- 第三章、vue-项目前端 - vue配置 | axios配置 | cookies配置 | element-ui配置 | bootstrap配置
目录 vue项目创建 环境 创建项目 重构项目目录 文件修订:目录中非配置文件的多余文件可以移除 全局配置:全局样式.配置文件 axios前后台交互 cookies操作 element-ui页面组件框 ...
- vue 自动注册全局组件
vue 自动注册全局组件 vue 注册全局组件的方式 const plugins = { install(Vue) { const requireComponent = require.context ...
- 集群通信组件tribes之通道拦截器
拦截器应该可以说是一个很经典的设计模式,它有点类似于过滤器,当某信息从一个地方流向目的地的过程中,可能需要统一对信息进行处理,如果考虑到系统的可扩展性和灵活性通常就会使用拦截器模式,它就像一个个关卡被 ...
随机推荐
- IIS Express 域认证问题(https://stackoverflow.com/questions/4762538/iis-express-windows-authentication)
option-1: edit \My Documents\IISExpress\config\applicationhost.config file and enable windowsAuthent ...
- Last Work-随机出题加法游戏
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Chapter07 链表(下):如何轻松学出正确的链表代码?
技巧一:理解指针或引用的含义 技巧二:指针丢失和内存泄漏 技巧三:利用哨兵简化实现难度 技巧四:重点留意边界条件处理 如果链表未空时,代码是否能够正常运行 如果链表只包含一个节点时,代码能否正常运行 ...
- SQL JOIN 中 on 与 where 的区别
left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录. right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录. inner join : 内连 ...
- mvc开发中DTO,DO,FROM的区别
DO:数据库实体类映射到model里的实体类,每个字段都和数据库相对应,一般来说开发的时候不要去添加或者修改里面的实体 DTO:与前台交互的时候(一般来说是查询操作)有一些数据字段是那一张表里面没有囊 ...
- 使用GSON工具实现json和其他数据格式间转换
1 package gson; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.google.gson. ...
- 4种好用的python编辑器
1.Sublime Text: 这是一个轻量级的代码编辑器,跨平台,支持几十种编程语言,包括Python,Java,C/C++等,小巧灵活,运行轻快,支持代码高亮.自动补全.语法提示,插件扩展丰富,是 ...
- sql语句实现行转列练习
create table STUDENT_SCORE( name VARCHAR2(20), subject VARCHAR2(20), score NUMBER(4,1));insert into ...
- orcal - 子查询
where 单行单列 SELECT AVG(sal) from emp; SELECT * FROM EMP WHERE sal <(SELECT AVG(sal) from emp); 单行多 ...
- macbook查找卸载pkg
pkg是macOS下的一种比较复杂的安装方式,装完了想要卸载有点不太好找,MAC下有个命令工具pkgutil,运行命令pkgutil --pkgs可以找到你的所有pkg,如图: 当然,也可以用grep ...