一、封装辅助函数
js
/**
* 防止重复弹出message、Notification、MessageBox弹框
*/
import { Message, Notification, MessageBox } from 'element-ui';
let currentMessage = null;
let currentMessageBox = null;
let currentNotification = null;
/*
* 防止重复弹出Message
* @param {Object} config - MessageBox默认的配置参数
*/
export function elMessage(options){
if (currentMessage) {
currentMessage.close();
}
currentMessage = Message(options);
}
['error', 'success', 'info', 'warning'].forEach((type) => {
elMessage[type] = (options) => {
if (typeof options === 'string') {
options = {
message: options,
};
}
options.type = type;
return elMessage(options);
};
});
/*
* 防止重复弹出MessageBox
* @param {Object} config - MessageBox默认的配置参数
* @param {function} callback 回调函数
*/
export function elMessageBox(config, closeBack) {
if (currentMessageBox && currentMessageBox.close) {
currentMessageBox.close();
}
currentMessageBox = MessageBox({
...config,
callback() {
if (closeBack) {
closeBack();
}
currentMessageBox = null;
},
});
}
/*
* 防止重复弹出Notification
* @param {Object} config - Notification默认的配置参数
* @param {function} callback 回调函数
*/
export function elNotification(config, closeBack) {
// 关闭之前的Notification
if (currentNotification && currentNotification.close) {
currentNotification.close();
}
// 新创建一个Notification
currentNotification = Notification({
...config,
// 关闭后,执行回调函数,关闭后重置currentNotification为null
onClose() {
if (closeBack) {
closeBack();
}
currentNotification = null;
},
});
}
二、全局引入
js
import { elMessage,elMessageBox,elNotification } from '@/utils/el-hint';
// 国际化
import i18n from './lang/index';
// element-ui
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI, {
size: 'medium',
i18n: (key, value) => i18n.t(key, value)
});
// 一定要放在引入ElementUI,否则不生效
Vue.prototype.$message = elMessage; //设置全局
Vue.prototype.$elMessageBox = elMessageBox; //设置全局
Vue.prototype.$elNotification = elNotification; //设置全局
三、使用
js
this.$message.success('1111');
this.$elMessageBox({
title:'标题',
message:'111',
showClose:false,
},() => {
// 关闭时的回调
});
this.$elNotification({
title:'111',
message:'222',
type:'error'
},() => {
// 关闭时的回调
});