Vue:实现element中message只提示一个

说明

项目开发ui组件用的是Element,其中message的提示用到很多很多,一开始并没考虑它的出现次数,不过调皮的测试狂点给弄出来一堆,在体验上并不是很好,于是我百度了一下大佬们怎么弄的,做了以下整理,加了一个自己增加的小东西

一 思路

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

二代码(以下......省略号为省略代码,与此次实现无关)

1.新建一个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

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)
})

三.其他说明

1.也可直接
import { message } from '@/utils/resetMessage'
引入后通过
message ( )
使用,参数与element一致
2.为什么在重写的时候添加了close参数?
重写后的message在使用原先的.close()关闭message时,无效
百度看到的方法都比较复杂,索性我就直接在改写的时候添加了,
使用方法如下
message({},true)
this.$message({},true)
true为关闭

四.总结

1.记得有的地方使用是没有办法直接this.$message(),因为this指向并不是Vue,这时候需要单独引入message通过message() 使用.
2.最后感谢能看到这篇文章的同学们,希望对你们有帮助.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容