一、遇到的问题
Element UI的Message
消息提示是点击一次触发一次的。在开发的时候经常会作为一些校验提示,但是公司的测试人员在进行测试时会一直点,然后就会出现如下图的情况。虽然客户使用的时候一般来说不会出现这种情况(毕竟客户不会闲着没事一直点点点,而且就算出现了也只是不太好看,对功能什么的都没什么影响),但既然测试提出来了那还是要解决的。
最开始查了下Element UI的官方文档,发现确实没提供只弹出一次的功能。其他的如MessageBox
和Notification
都不太符合要求,更重要的是Message
已在项目中大量存在,如果不能在全局解决的话,修改成本实在是太高昂了 。
二、解决方案:
在vue中使用Element的message组件
- 在vue文件中使用
this.$message({message: "提示信息",type: "success"
})
- 在js文件中使用
import ElementUI from 'element-ui';
ElementUI.Message({message: '提示信息',type: 'warning'
});
解决消息弹窗重复显示
// message.js
import { Message } from 'element-ui'const showMessage = Symbol('showMessage')
class DonMessage {success (options, single = true) {this[showMessage]('success', options, single)}warning (options, single = true) {this[showMessage]('warning', options, single)}info (options, single = true) {this[showMessage]('info', options, single)}error (options, single = true) {this[showMessage]('error', options, single)}[showMessage] (type, options, single) {if (single) {// 判断是否已存在Messageif (document.getElementsByClassName('el-message').length === 0) {Message[type](options)}} else {Message[type](options)}}
}
export default new DonMessage()
在有需要的地方引入
import DonMessage from '@/message'
- js文件中直接使用
DonMessage.warning('请登录')
- 挂载到vue原型上
// main.js
Vue.prototype.$message = DonMessage
// vue文件中调用
this.$message.warning("请登录")