返回顶部

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)
即close参数为true时,关闭message实例
posted @ 2023-03-15 16:23  前端-xyq  阅读(738)  评论(0编辑  收藏  举报