当前位置: 首页 > news >正文

解决uniapp中showLoading与showToast相互覆盖问题

问题描述

用uniapp开发微信小程序时,如果uni.showLoading与uni.showToast混合使用,会彼此覆盖对方,原因是小程序将Toast与Loading放在同一层渲染引起的,且没有判断彼此是否正在显示。


解决方案一、

简单粗暴,用showToast代替showLoading,将icon值设为:“loading”;并且将duration的值设置足够大,接口成功响应后调用uni.hideToast隐藏

uni.showToast({title: "加载中...",icon: "loading",duration: 2 * 60 * 1000,
});

解决方案二(推荐)、

重写toast相关方法,从根本上解决问题,一劳永逸。新建toast.js文件,内容如下:

// 非ts版本,如需在ts项目中使用请自行解决类型报错问题const showToast = uni.showToast;
const hideToast = uni.hideToast;
const showLoading = uni.showLoading;
const hideLoading = uni.hideLoading;
const baseConfig = {icon: 'none',duration: 1500,mask: false,title: '',
}
let isShowLoading = false;
let isShowToast = false;uni.showToast = (config) => {if (isShowLoading) {uni.hideLoading();//保证toast优先级更高}isShowToast = true;const obj = { ...baseConfig };if (Object.prototype.toString.call(config) === '[object Object]') {Object.assign(obj, config);} else {obj.title = config || '';}showToast.call(uni, obj);setTimeout(() => {isShowToast = false;}, obj.duration);
};uni.hideToast = () => {isShowToast = false;hideToast.call(uni);
};uni.showLoading = (config) => {if (isShowToast) return; //优先保证tosast显示isShowLoading = true;const obj = { ...baseConfig };if (Object.prototype.toString.call(config) === '[object Object]') {Object.assign(obj, config);} else {obj.title = config || '';}showLoading.call(uni, obj);
};uni.hideLoading = () => {if (isShowToast) return;isShowLoading = false;hideLoading.call(uni);
};/**toast扩展函数**/
uni.showSuccess = (title, duration) => {uni.showToast({icon: 'success',title,duration: duration || baseConfig.duration,});
};uni.showError = (title, duration) => {uni.showToast({icon: 'error',title,duration: duration || baseConfig.duration,});
};uni.showFail = (title, duration) => {uni.showToast({icon: 'fail',title,duration: duration || baseConfig.duration,});
};

最后在main.js中引入即可:

使用方法与原生api一样

http://www.dtcms.com/a/495053.html

相关文章:

  • 网站建设的外国文献三星网上商城怎么取消订单
  • 电子商务网站的建设内容家庭装什么宽带最划算
  • 轮廓系数(一个异型簇的分类标准)
  • 把 1688 商品详情搬进 MySQL:PHP 爬虫全链路实战(2025 版)
  • python+uniapp基于微信小程序的个人物品租售系统
  • 中国(新疆)航空航天国防展--三款MEMS惯性导航系统解析
  • 十大拿货网站爱做奈官方网站
  • 图像处理之膨胀
  • AI部署001 - C++环境部署与服务器使用
  • MP4格式视频无法播放怎么修?4个修复方法,解决难题
  • 语音处理:音频移形幻影,为何大振幅信号也无声
  • dedecms学校网站模板wordpress 3d插件
  • 注册一个新公司需要多少钱seo如何进行优化
  • Git流程规范介绍
  • Python 第十五节 OS文件操作相关方法用途详解
  • 动态规划的“递归之舞”:破解字符串的深层结构——扰乱字符串
  • 淮北市做网站最好的公司上海网站搭建平台公司
  • 网站域名设计推荐新华网海南频道
  • InternVL3.5多模态多大模型改进点及视觉分辨率路由模块技术浅尝
  • 人工智能基础知识笔记十八:Prompt Engineering
  • 深入理解Shell与反弹Shell:从原理到实战
  • LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
  • EvalScope模型压力测试实战
  • 极速网站建设服务商厦门网站建设网络推广
  • 新建网站如何调试网页设计公司的调研
  • 模拟oracle 索引平衡树叶子节点
  • Android 内存优化
  • Java JVM “垃圾回收(GC)”面试清单(含超通俗生活案例与深度理解)
  • Python快速落地的临床知识问答与检索项目(2025年9月教学实现部分)
  • 从0到1掌握Spring Boot自动配置:自定义配置实战指南