Message 全局提示组件使用文档
概述
Message 是一个轻量级的全局提示组件,用于在页面顶部展示操作结果、提示信息等,支持自动关闭、手动关闭、鼠标悬浮暂停计时等功能,提供了多种预设样式(成功、警告、错误、信息)。
安装与引入
1. 项目结构
确保组件文件结构如下:
src/
├── components/
│ ├── Message/
│ │ ├── Message.vue // 消息组件本体
│ │ └── index.js // 组件调用逻辑(上文提供的代码)
2. 全局引入(推荐)
在 main.js 中全局注册:
import { createApp } from 'vue'
import App from './App.vue'
import Message from './components/Message'
const app = createApp(App)
// 挂载到Vue实例原型
app.config.globalProperties.$message = Message
app.mount('#app')
3. 局部引入
在需要使用的组件中单独引入:
import Message from '@/components/Message'
基本使用
1. 最简调用
直接传入字符串,默认显示 info 类型的提示:
// 全局引入方式
this.$message('这是一条普通提示信息')
// 局部引入方式
Message('这是一条普通提示信息')
2. 基础配置调用
传入配置对象,自定义提示类型、时长等:
this.$message({
type: 'success', // 提示类型
content: '操作成功!', // 提示内容
duration: 5000 // 显示时长(毫秒),0表示不自动关闭
})
3. 快捷方法调用(推荐)
组件提供了四种预设类型的快捷方法,使用更简洁:
成功提示
// 基础用法
this.$message.success('操作成功!')
// 自定义时长
this.$message.success('操作成功!', 5000)
警告提示
this.$message.warning('请注意,这是一条警告信息')
错误提示
this.$message.error('操作失败,请重试!')
信息提示
this.$message.info('这是一条普通的信息提示')
4. 手动关闭
调用 Message 方法会返回一个包含 close 方法的对象,可手动关闭提示:
// 显示提示并保存实例
const messageInstance = this.$message.success('操作成功,5秒后自动关闭')
// 手动关闭(比如点击按钮时)
document.querySelector('#close-btn').addEventListener('click', () => {
messageInstance.close()
})
5. 不自动关闭
设置 duration: 0 可让提示一直显示,直到手动关闭:
this.$message({
type: 'error',
content: '发生严重错误,请联系管理员',
duration: 0 // 不自动关闭
})
完整配置项
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| type | String | 'info' | 提示类型,可选值:success、warning、error、info |
| content | String | '' | 提示内容(必填) |
| duration | Number | 3000 | 自动关闭时长(毫秒),设置为 0 则不自动关闭 |
| top | Number | 自动计算 | 提示框距离顶部的像素值(一般无需手动设置,组件会自动计算) |
| onClose | Function | () => {} | 提示框关闭时的回调函数 |
示例代码
1. 在 Vue 组件中使用
<template>
<div class="demo">
<button @click="showSuccess">成功提示</button>
<button @click="showWarning">警告提示</button>
<button @click="showError">错误提示</button>
<button @click="showInfo">信息提示</button>
<button @click="showPersistent">不自动关闭</button>
<button @click="closeManual">手动关闭</button>
</div>
</template>
<script>
import { defineComponent } from 'vue'
// 局部引入(如果未全局注册)
// import Message from '@/components/Message'
export default defineComponent({
setup() {
let messageInstance = null
// 成功提示
const showSuccess = () => {
this.$message.success('恭喜你,操作成功!')
// 局部引入方式:Message.success('恭喜你,操作成功!')
}
// 警告提示
const showWarning = () => {
this.$message.warning('数据不完整,请补充后提交')
}
// 错误提示
const showError = () => {
this.$message.error('网络异常,请求失败')
}
// 信息提示
const showInfo = () => {
this.$message.info('这是一条普通的信息提示')
}
// 不自动关闭的提示
const showPersistent = () => {
messageInstance = this.$message({
type: 'error',
content: '此提示不会自动关闭,需手动点击×',
duration: 0
})
}
// 手动关闭提示
const closeManual = () => {
if (messageInstance) {
messageInstance.close()
messageInstance = null
}
}
return {
showSuccess,
showWarning,
showError,
showInfo,
showPersistent,
closeManual
}
}
})
</script>
2. 在非组件环境中使用
// utils/request.js(例如axios拦截器中)
import Message from '@/components/Message'
// 请求失败拦截
axios.interceptors.response.use(
response => response,
error => {
Message.error(`请求失败:${error.message}`)
return Promise.reject(error)
}
)
3. 浏览器全局使用
如果在 HTML 中直接引入(如 VuePress 等场景),可通过全局变量调用:
<button onclick="$message.success('全局调用成功')">点击提示</button>
特性说明
- 自动排版:多个提示框会自动垂直排列,间距 16px,基础偏移 20px
- 交互行为:
- 鼠标悬浮到提示框上时,自动关闭计时暂停
- 鼠标离开后,计时恢复
- 点击提示框右侧的 × 可手动关闭
- 动画效果:
- 提示框入场时有淡入+上移动画
- 鼠标悬浮时提示框阴影会加深,提升视觉反馈
- 样式区分:不同类型的提示框有对应的颜色、图标和背景渐变,视觉区分明显
样式自定义
如果需要修改提示框样式,可在项目的全局样式文件中覆盖以下 CSS 类:
/* 修改提示框基础样式 */
.message-item {
min-width: 350px; /* 修改最小宽度 */
padding: 12px 20px; /* 修改内边距 */
}
/* 修改成功提示的颜色 */
.message-success {
border-left-color: #52c41a;
}
/* 修改关闭按钮样式 */
.message-close {
font-size: 18px;
color: #ff4d4f;
}
总结
- Message 组件支持全局引入和局部引入两种方式,全局引入后可通过
this.$message便捷调用; - 提供
success/warning/error/info四种快捷调用方法,也可通过配置对象自定义提示参数; - 核心特性包括自动关闭、手动关闭、鼠标悬浮暂停计时、自动排版,可通过覆盖 CSS 类自定义样式。
