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

Element 的 Message 多个显示时,只显示一个的封装办法

Element 的 Message 多个显示时,只显示一个的封装办法

实现思路

可以通过自定义 Message 组件的方式来优化,确保多个相同的 Message 只显示一个。

步骤一:创建自定义 Message 工具类

首先,让我们创建一个自定义的 Message 工具类:

src/utils/message.js

import { Message } from 'element-ui';// 消息缓存和去重管理
class MessageManager {constructor() {this.messageCache = new Map(); // 存储当前显示的消息this.messageQueue = new Set(); // 防止重复消息this.debounceTime = 300; // 防抖时间(毫秒)}// 显示消息的核心方法showMessage(options) {const { message, type = 'info', duration = 3000, ...otherOptions } = options;// 生成消息的唯一标识const messageKey = `${type}-${message}`;// 检查是否已经有相同的消息正在显示if (this.messageQueue.has(messageKey)) {return;}// 添加到队列中this.messageQueue.add(messageKey);// 显示消息const messageInstance = Message({message,type,duration,showClose: true,...otherOptions,onClose: () => {// 消息关闭时从队列中移除this.messageQueue.delete(messageKey);if (this.messageCache.has(messageKey)) {this.messageCache.delete(messageKey);}}});// 将消息实例存储到缓存中this.messageCache.set(messageKey, messageInstance);// 自动清理队列(防止内存泄漏)if (duration > 0) {setTimeout(() => {this.messageQueue.delete(messageKey);this.messageCache.delete(messageKey);}, duration + 100);}return messageInstance;}// 成功消息success(message, options = {}) {return this.showMessage({message,type: 'success',...options});}// 错误消息error(message, options = {}) {return this.showMessage({message,type: 'error',...options});}// 警告消息warning(message, options = {}) {return this.showMessage({message,type: 'warning',...options});}// 信息消息info(message, options = {}) {return this.showMessage({message,type: 'info',...options});}// 清除所有消息closeAll() {this.messageCache.forEach(instance => {if (instance && instance.close) {instance.close();}});this.messageCache.clear();this.messageQueue.clear();}// 清除特定类型的消息closeByType(type) {this.messageCache.forEach((instance, key) => {if (key.startsWith(`${type}-`)) {if (instance && instance.close) {instance.close();}this.messageCache.delete(key);this.messageQueue.delete(key);}});}
}// 创建单例实例
const messageManager = new MessageManager();export default messageManager;

步骤二:修改 main.js 全局配置

接下来,我们需要在 main.js 中配置这个封装的 Message
src/main.js

// 导入优化的 Message 组件
import messageManager from '@/utils/message.js'// 挂载优化的 Message 组件到全局
Vue.prototype.$message = messageManager;

步骤三:更新文件中使用的 Message

然后更新 src/api/index.js 文件,使用我们优化的 Message
src/api/index.js

import messageManager from '@/utils/message.js';// 响应拦截器:处理响应数据
messageManager.error('接口不存在');
messageManager.error('服务器错误,请稍后再试');

步骤四:更新公共方法(其他js)中的 Message 使用

更新 src/utils/index.js 中的 Message 使用
utils/index.js

import messageManager from '@/utils/message.js'; // 导入优化的 Message 组件
messageManager.success('退出成功');

封装优势

优化的主要内容:

  1. 防重复显示:相同的消息在同一时间只会显示一个
  2. 类型区分:不同类型的相同消息可以同时显示
  3. 内存管理:自动清理过期的消息缓存,防止内存泄漏
  4. 向下兼容:完全兼容现有的 this.$message 用法
  5. 功能增强
    • closeAll() - 关闭所有消息
    • closeByType(type) - 关闭特定类型的消息
  6. 灵活配置:支持所有 Element UI Message 的原生参数

使用示例

使用方式与原来完全相同:

// 在组件中使用
this.$message.success('操作成功');
this.$message.error('操作失败');
this.$message.warning('警告信息');
this.$message.info('提示信息');// 高级用法
this.$message.success('操作成功', { duration: 5000 });
this.$message.closeAll(); // 关闭所有消息
this.$message.closeByType('error'); // 只关闭错误消息
http://www.lryc.cn/news/579678.html

相关文章:

  • LeetCode 317 最短距离选址问题详解(Swift 实现 + BFS 多源遍历)
  • 从 TCP/IP 协议栈角度深入分析网络文件系统 (NFS)
  • MySQL的窗口函数介绍
  • 基于SpringBoot+Vue的酒类仓储管理系统
  • 【网络协议】WebSocket简介
  • 【tensorflow2.6.0 一系列相关报错记录】
  • 关于微前端框架micro,子应用设置--el-primary-color失效的问题
  • Linux性能分析工具
  • Oracle:报错jdbc:oracle:thin:@IP地址:端口:实例名, errorCode 28001, state 99999
  • Spark 4.0的VariantType 类型以及内部存储
  • 打造一个可维护、可复用的前端权限控制方案(含完整Demo)
  • 2025年4月SCI-吕佩尔狐优化算法Rüppell’s fox optimizer-附Matlab免费代码
  • 苹果手机扫描PDF:整理课堂笔记、保存重要文件
  • Intellij IDEA中Maven的使用
  • H3C-备件流程
  • EXCEL 基础函数
  • 论文阅读笔记——Autoregressive Image Generation without Vector Quantization
  • 构建引擎: 打造小程序编译器
  • 工业路由器赋能智慧电力储能柜实时通讯,构建电力智能化新生态
  • x搜索新增了x-client-transaction-id的验证
  • 网络工具如何帮助消除网络安全风险
  • 通达信 主力资金与成交量分析系统 幅图
  • 机器学习-03(机器学习任务攻略)
  • 边缘计算解决方案:数据中心机房IT设备数据采集与调优
  • STM32-PWM驱动无源蜂鸣器
  • 使用numpy的快速傅里叶变换的一些问题
  • AI+软件测试——03软件的缺陷及管理
  • 一、Docker:一场颠覆应用部署与运维的容器革命
  • 数学建模_时间序列
  • 月更!2025年7月鼠标入门及选购推荐(含无线鼠标、游戏鼠标)