小白学网络小白学网络
🏡 首页
💬 说说
🗺️ 足迹地图
👤 关于作者
🏡 首页
💬 说说
🗺️ 足迹地图
👤 关于作者
  • Message提示组件使用文档

    • Message 全局提示组件使用文档

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  // 不自动关闭
})

完整配置项

参数名类型默认值说明
typeString'info'提示类型,可选值:success、warning、error、info
contentString''提示内容(必填)
durationNumber3000自动关闭时长(毫秒),设置为 0 则不自动关闭
topNumber自动计算提示框距离顶部的像素值(一般无需手动设置,组件会自动计算)
onCloseFunction() => {}提示框关闭时的回调函数

示例代码

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>

特性说明

  1. 自动排版:多个提示框会自动垂直排列,间距 16px,基础偏移 20px
  2. 交互行为:
    • 鼠标悬浮到提示框上时,自动关闭计时暂停
    • 鼠标离开后,计时恢复
    • 点击提示框右侧的 × 可手动关闭
  3. 动画效果:
    • 提示框入场时有淡入+上移动画
    • 鼠标悬浮时提示框阴影会加深,提升视觉反馈
  4. 样式区分:不同类型的提示框有对应的颜色、图标和背景渐变,视觉区分明显

样式自定义

如果需要修改提示框样式,可在项目的全局样式文件中覆盖以下 CSS 类:

/* 修改提示框基础样式 */
.message-item {
  min-width: 350px;  /* 修改最小宽度 */
  padding: 12px 20px; /* 修改内边距 */
}

/* 修改成功提示的颜色 */
.message-success {
  border-left-color: #52c41a;
}

/* 修改关闭按钮样式 */
.message-close {
  font-size: 18px;
  color: #ff4d4f;
}

总结

  1. Message 组件支持全局引入和局部引入两种方式,全局引入后可通过 this.$message 便捷调用;
  2. 提供 success/warning/error/info 四种快捷调用方法,也可通过配置对象自定义提示参数;
  3. 核心特性包括自动关闭、手动关闭、鼠标悬浮暂停计时、自动排版,可通过覆盖 CSS 类自定义样式。
最近更新:: 2026/2/25 08:38
Contributors: 小白学网络