element中message只提示一个

思路、

  • 每次触发message的时候进行判断,如果不存在就赋予实例,如果存在则通过close()关闭

新建一个resetMessage.js文件,我放在了utils里面,js中代码如下:

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

main.js中将重写后的message挂载到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)
})
  • 说明
  • 1.也可直接
    import { message } from '@/utils/resetMessage'
    引入后通过
    message ( )
    使用,参数与element一致
  • 2.为什么在重写的时候添加了close参数?
    重写后的message在使用原先的.close()关闭message时,无效
    百度看到的方法都比较复杂,索性我就直接在改写的时候添加了,
    使用方法如下
    message({},true)
    this.$message({},true)
    true为关闭
  • 3.记得有的地方使用是没有办法直接this.$message(),因为this指向并不是Vue,这时候需要单独引入message通过message()使用

你可能感兴趣的:(element中message只提示一个)