思路、
- 每次触发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()
使用
网友评论