实现vue message
Vue 消息提示组件实现
在 Vue 中实现消息提示功能可以通过自定义组件或使用第三方库完成。以下是几种常见实现方式:
使用 Vue 原生实现
创建全局 Message 组件:
// Message.vue
<template>
<div class="message" :class="type" v-if="visible">
{{ content }}
</div>
</template>
<script>
export default {
data() {
return {
visible: false,
content: '',
type: 'info',
duration: 3000
}
},
methods: {
show() {
this.visible = true
setTimeout(() => {
this.visible = false
}, this.duration)
}
}
}
</script>
<style>
.message {
position: fixed;
top: 20px;
left: 50%;
transform: translateX(-50%);
padding: 10px 20px;
border-radius: 4px;
z-index: 9999;
}
.message.info {
background-color: #f0f9eb;
color: #67c23a;
}
.message.error {
background-color: #fef0f0;
color: #f56c6c;
}
</style>
注册为全局方法:

// main.js
import Vue from 'vue'
import Message from './components/Message.vue'
const messageConstructor = Vue.extend(Message)
function showMessage(options) {
const instance = new messageConstructor({
data: options
})
instance.$mount()
document.body.appendChild(instance.$el)
instance.show()
}
Vue.prototype.$message = showMessage
使用方式:
this.$message({
content: '操作成功',
type: 'info',
duration: 2000
})
使用第三方库
Element UI 的 Message 组件:

import { Message } from 'element-ui'
// 成功提示
Message.success('成功消息')
// 错误提示
Message.error('错误消息')
// 警告提示
Message.warning('警告消息')
Ant Design Vue 的 message:
import { message } from 'ant-design-vue'
message.success('成功消息')
message.error('错误消息')
message.warning('警告消息')
自定义高级实现
实现可堆叠的消息队列:
// message.js
let instances = []
let seed = 1
const Message = function(options) {
const id = 'message_' + seed++
const instance = new messageConstructor({
data: options
})
instance.id = id
instance.$mount()
document.body.appendChild(instance.$el)
instance.visible = true
instances.push(instance)
return instance
}
['success', 'warning', 'info', 'error'].forEach(type => {
Message[type] = options => {
if (typeof options === 'string') {
options = {
message: options
}
}
options.type = type
return Message(options)
}
})
动画效果增强
添加过渡动画:
<transition name="fade">
<div class="message" v-if="visible">
{{ content }}
</div>
</transition>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
</style>
以上实现方式可根据项目需求选择简单自定义实现或使用成熟的UI库方案。自定义实现更灵活但需要处理更多细节,第三方库方案功能完善但体积较大。






