vue——el-message,多个message只提示一个
参考:https://www.jianshu.com/p/686399267dff Vue:实现element中message只提示一个
思路
重写el-message,封装为js:每次触发message的时候进行判断,如果不存在就赋予实例,如果存在则通过close()关闭、
实现步骤
1.新建一个resetMessage.js文件,目录为util下(根据自身选择),代码如下:
import { Message } from 'element-ui'; let messageInstance = null; const resetMessage = (options,close) => { // 如果已经存在实例则关闭 if(messageInstance) { messageInstance.close() } // 不存在实例则赋予实例 messageInstance = Message(options) // 当有关闭参数的时候关闭实例,为什么添加close参数后面详细说明 if(close){ messageInstance.close() } };
['error','success','info','warning'].forEach(type => { resetMessage[type] = options => { if(typeof options === 'string') { options = { message:options } } options.type = type return resetMessage(options) } }) export const message = resetMessage
2.全局使用时,在main.js文件中将重写后的message放到vue原型链上,代码如下:
import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' ...... import { message } from '@/utils/resetMessage' // 引入重写的message Vue.use(ElementUI) Vue.prototype.$message = message // 将message挂到Vue.prototype中.(使用方法 this.$message() 参数与element一致) new Vue({ el: '#app', render: h => h(App) })
3.局部使用或js之类的文件中使用:
... import { message } from '@/util/resetMessage' ... message.error('操作失败'); // 参数与element一致 ....
说明
1.为什么在重写的时候添加了close参数?
重写后的message在使用原先的.close()关闭message时,无效
百度看到的方法都比较复杂,索性就直接在改写的时候添加了,
使用方法如下:
message({},true) this.$message({},true)