Vue实现自定义Message

本文介绍了在Vue项目中,由于体积和自定义需求,不使用element-UI的message组件,而是选择自行封装一个Vue custom-message的过程。文章详细阐述了基本原理,包括使用Vue.extend创建构造器并挂载到body,以及实现步骤,包括创建messageMain.vue组件、创建构造器并在main.js中安装到Vue实例。最后提供了GitHub和码云上的完整代码链接。
摘要由CSDN通过智能技术生成

Vue实现custom-message

效果图展示

前言

之前在项目中使用vue框架中的element-UI时,使用element-UI的弹窗非常的nice,但在最近的项目中,要求项目体积小,且高度自定义,所以不能把element-UI的message的组件引进来再改样式,于是决定自己封装一个,来满足需求。

基本原理

使用Vue.extend(options)创建一个Vue构造器,再将构造器实例化,挂载到body中

...
const MessageBox = Vue.extend(MessageMain);
...
const Message = function (options = {
   }) {
   
...
	let instance = new MessageBox({
   
        data: options
    });
    //在文档之外渲染并且随后挂载
    instance.vm = instance.$mount();
    document.body.appendChild(instance.vm.$el);
...
}

通过构造器,将组件挂载到body上

实现步骤

  1. 创建messageMain.vue组件
<template>
  <transition name="taataa">
    <div :class="['plugins-message-box',type]" v-if="visible">
      <div :class="['message-icon','iconfont',iconClass]"></div>
      <div class="message-container">{
   {
   message}}</div>
    </div>
  </transition>
</template>

<
以下是一个基于 Vue3 和 TypeScript 实现自定义 message 的示例: ```html <template> <div> <button @click="showSuccessMessage">Show Success Message</button> <button @click="showErrorMessage">Show Error Message</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' interface Message { type: string; content: string; } export default defineComponent({ name: 'CustomMessage', data() { return { messages: [] as Message[] } }, methods: { showMessage(type: string, content: string) { this.messages.push({ type, content }) }, showSuccessMessage() { this.showMessage('success', 'This is a success message.') }, showErrorMessage() { this.showMessage('error', 'This is an error message.') } } }) </script> <style> .message { padding: 10px; margin-bottom: 10px; border-radius: 5px; } .success { background-color: green; color: white; } .error { background-color: red; color: white; } </style> <template> <div> <div v-for="message in messages" :key="message.content" :class="['message', message.type]"> {{ message.content }} </div> </div> </template> ``` 在上述示例中,我们定义了一个 `Message` 接口,用于表示消息的类型和内容。然后,在组件中定义了一个 `messages` 数组,用于存储所有的消息。通过 `showMessage` 方法,我们可以将新的消息添加到 `messages` 数组中。最后,在模板中使用 `v-for` 指令遍历 `messages` 数组,渲染出每条消息。 我们还为消息定义了两种类型:`success` 和 `error`,并为它们分别定义了不同的样式。通过调用 `showSuccessMessage` 和 `showErrorMessage` 方法,我们可以分别显示成功消息和错误消息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值