当前位置:首页 > VUE

实现vue message

2026-03-28 00:32:28VUE

实现 Vue Message 组件

Vue Message 组件通常用于全局消息提示,类似于 Element UI 的 this.$message。以下是实现方法:

1. 创建 Message 组件

实现vue message

<template>
  <transition name="message-fade">
    <div v-if="visible" class="message" :class="[type]">
      {{ message }}
    </div>
  </transition>
</template>

<script>
export default {
  name: 'Message',
  data() {
    return {
      message: '',
      type: 'info',
      visible: false,
      duration: 3000
    }
  },
  mounted() {
    this.show()
  },
  methods: {
    show() {
      this.visible = true
      setTimeout(() => {
        this.hide()
      }, this.duration)
    },
    hide() {
      this.visible = false
      setTimeout(() => {
        this.$destroy()
        this.$el.remove()
      }, 500)
    }
  }
}
</script>

<style scoped>
.message {
  position: fixed;
  top: 20px;
  left: 50%;
  transform: translateX(-50%);
  padding: 10px 20px;
  border-radius: 4px;
  z-index: 9999;
}

.message.info {
  background-color: #f4f4f5;
  color: #909399;
}

.message.success {
  background-color: #f0f9eb;
  color: #67c23a;
}

.message.error {
  background-color: #fef0f0;
  color: #f56c6c;
}

.message.warning {
  background-color: #fdf6ec;
  color: #e6a23c;
}

.message-fade-enter-active,
.message-fade-leave-active {
  transition: all 0.3s;
}

.message-fade-enter,
.message-fade-leave-to {
  opacity: 0;
  transform: translate(-50%, -20px);
}
</style>

2. 创建插件入口

import Vue from 'vue'
import Message from './Message.vue'

const MessageConstructor = Vue.extend(Message)

const message = (options) => {
  if (typeof options === 'string') {
    options = {
      message: options
    }
  }

  const instance = new MessageConstructor({
    data: options
  })

  instance.$mount()
  document.body.appendChild(instance.$el)
  return instance
}

const types = ['success', 'warning', 'info', 'error']
types.forEach(type => {
  message[type] = options => {
    if (typeof options === 'string') {
      options = {
        message: options
      }
    }
    options.type = type
    return message(options)
  }
})

export default message

3. 在 main.js 中全局注册

实现vue message

import Vue from 'vue'
import message from './plugins/message'

Vue.prototype.$message = message

4. 使用示例

// 普通用法
this.$message('这是一条消息')

// 带类型
this.$message.success('成功消息')
this.$message.error('错误消息')
this.$message.warning('警告消息')
this.$message.info('提示消息')

// 带配置
this.$message({
  message: '自定义消息',
  type: 'success',
  duration: 5000
})

5. 高级功能扩展

  • 添加关闭按钮
  • 支持多消息同时显示
  • 支持 HTML 内容
  • 支持手动关闭
  • 支持位置配置(顶部/底部/中间)

这个实现提供了基本的 Message 功能,可以根据项目需求进一步扩展和完善。

标签: vuemessage
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

vue实现setinterval

vue实现setinterval

在 Vue 中使用 setInterval Vue 中可以通过生命周期钩子和方法结合 setInterval 实现定时任务。以下是一个完整的实现示例: <template> <…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现ppt

vue实现ppt

Vue 实现 PPT 的功能 Vue 可以结合第三方库或自定义组件实现类似 PPT 的演示效果。以下是几种常见的方法: 使用第三方库 reveal.js reveal.js 是一个流行的演示框架,支…

vue键盘实现

vue键盘实现

监听键盘事件 在Vue中监听键盘事件可以通过v-on指令或@缩写实现。常见的键盘事件包括keydown、keyup和keypress。例如监听回车键事件: <template> &l…

vue实现数据

vue实现数据

Vue 实现数据绑定的方法 Vue.js 提供了多种方式实现数据绑定,包括双向绑定、单向绑定以及动态数据绑定。以下是几种常见的实现方式: 双向数据绑定(v-model) 双向数据绑定通常用于表单元素…