说明
项目开发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.最后感谢能看到这篇文章的同学们,希望对你们有帮助.