Vue封装全局toast组件的完整实例

下面是关于“Vue封装全局toast组件的完整实例”的详细攻略:

一、需求描述

我们需要封装一个可全局使用的 toast 组件,并且需要支持以下功能:

  1. 可以显示文字和图标
  2. 可以设置显示时间和位置
  3. 支持自定义样式

二、准备工作

在开始封装 toast 组件之前,我们需要先准备好 Vue 项目:

  1. 安装 Vue:使用命令 npm install vueyarn add vue 安装 Vue
  2. 创建一个 Toast.vue 文件:该文件将作为我们自定义的 toast 组件的核心文件
  3. 在项目中全局注册该组件,并在需要使用的地方调用

三、实现步骤

1. 编写Toast.vue文件

首先,在 Toast.vue 文件中,我们需要定义 toast 的基本样式和结构。在这里,我们将使用 Element UIMessage 组件作为基础,对其进行自定义加工。代码如下:

<template>
  <div :class="['el-message', 'toast-position-' + position, type]">
    <i :class="['el-message__icon', 'el-icon-' + icon]" v-if="icon"></i>
    <div class="el-message__content">
      <p v-if="!!slot">{{ slot }}</p>
      <p v-else>{{ message }}</p>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    message: {
      type: String,
      default: ''
    },
    type: {
      type: String,
      default: 'info'
    },
    icon: {
      type: String,
      default: ''
    },
    slot: {
      type: String,
      default: ''
    },
    position: {
      type: String,
      default: 'bottom'
    },
    duration: {
      type: Number,
      default: 2500
    }
  },
  data () {
    return {
      isShow: false
    }
  },
  watch: {
    isShow (isShow) {
      if (isShow) {
        setTimeout(() => {
          this.close()
        }, this.duration)
      }
    }
  },
  methods: {
    show () {
      this.isShow = true
    },
    close () {
      this.isShow = false
      this.$destroy()
      this.$el.parentNode.removeChild(this.$el)
    }
  },
  mounted () {
    document.body.appendChild(this.$el)
    this.show()
  }
}
</script>

<style>
.el-message {
  position: fixed;
  width: 300px;
  left: 50%;
  z-index: 9999;
  border-radius: 4px;
  padding: 15px 20px;
  box-sizing: border-box;
  color: #fff;
  font-size: 14px;
  -webkit-transform: translate(-50%, 0);
          transform: translate(-50%, 0);
  opacity: 0;
  -webkit-transition: opacity 0.3s;
  transition: opacity 0.3s;
}

.el-icon-success {
  color: #67c23a;
}

上述代码中,我们定义了 toast 的基本结构,并设置了一些默认参数。同时,我们也定义了 showclose 方法,用于显示和关闭 toast,并实现了 watch 属性,用于监听 toast 是否需要自动关闭。

2. 注册全局组件

接下来,我们需要将 Toast.vue 文件注册为全局组件,以便在任何地方都可以调用 toast。在项目入口文件 main.js 中,添加以下代码:

import Vue from 'vue'
import Toast from './components/Toast.vue'

function createToast (props) {
  const Instance = new Vue({
    render: h => h(Toast, { props })
  })

  Instance.$mount()

  return Instance.$children[0]
}

Vue.prototype.$toast = (msg, type = 'info', duration = 2500) => {
  const toast = createToast({
    message: msg,
    type,
    duration
  })

  toast.$on('close', () => {
    document.body.removeChild(toast.$el)
    toast.$destroy()
  })
}

上述代码中,我们使用 Vue.prototype 扩展了 $toast 方法,该方法接收三个参数:消息内容、类型、持续时间。同时,我们调用 createToast 方法,创建一个 toast 实例,并将参数传递给它。

最后,我们使用 $on 监听 toast 实例的 close 事件,实现关闭 toast 的功能。

四、使用示例

在上述步骤完成之后,我们就可以在任何地方使用 $toast 方法了。以下是两个简单的示例:

示例一:普通提示

this.$toast('普通提示')

上述代码会在页面底部弹出一个普通提示,持续时间为 2.5 秒。

示例二:自定义样式

this.$toast('进度提示', 'info', 5000, {
  icon: 'loading',
  type: 'success'
})

上述代码会在页面底部弹出一个带有进度条的成功提示,持续时间为 5 秒,同时会显示一个加载图标。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue封装全局toast组件的完整实例 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • iPadOS 13.1.3固件下载地址 iPadOS13.1.3固件下载地址大全

    iPadOS 13.1.3固件下载地址攻略 iPadOS 13.1.3是苹果公司为iPad设备推出的最新固件版本。本攻略将详细介绍如何获取iPadOS 13.1.3固件的下载地址,并提供两个示例说明。 步骤一:访问苹果官方网站 首先,打开您的浏览器并访问苹果官方网站(https://www.apple.com)。 步骤二:导航至iPadOS下载页面 在苹果官…

    other 2023年8月4日
    00
  • python的文件锁使用

    简介 在Python中,我们可以使用文件锁来控制对文件的访问。文件锁是一种同步原语,用于协调对共享资源的访问。在多个进程或线程同时访问同一文件时,文件锁可以确保数据的一致性和完整性。 步骤 以下是在Python中使用文件锁的步骤。 步骤1:导入必要的模块 在使用文件锁之前,我们需要导入必要的模块。我们可以使用以下代码导入fcntl和os模块: import …

    other 2023年5月6日
    00
  • 详解Android应用中使用TabHost组件进行布局的基本方法

    详解Android应用中使用TabHost组件进行布局的基本方法 在Android应用中,使用TabHost组件可以实现多个标签页的布局,使用户可以方便地在不同的标签页之间切换。下面是使用TabHost组件进行布局的基本方法的详细攻略。 步骤一:添加TabHost组件到布局文件 首先,在你的布局文件中添加一个TabHost组件。可以使用以下代码示例: &lt…

    other 2023年9月7日
    00
  • 微信小程序 生命周期详解

    微信小程序生命周期详解 微信小程序的生命周期是开发小程序时需要了解的重要内容之一。理解生命周期可以让开发者更好地掌握小程序的全局事件和组件的状态变化。本文将全面介绍微信小程序的生命周期,包括整个小程序的生命周期和页面组件的生命周期,并通过示例说明各个生命周期的执行顺序和具体作用。 整个小程序的生命周期 整个小程序的生命周期包括小程序本身的生命周期和 App …

    other 2023年6月27日
    00
  • QT实战之打开最近文档功能的实现

    当我们在使用软件过程中,需要频繁地打开一些文档文件,对于经常使用的那些文档,我们有时候需要一种快捷的方式来定位和打开它们,这时候一个最近文档的列表就非常有用了。 在QT中实现最近文档功能其实非常简单,我们可以通过QSettings和QListWidget配合来实现这一功能。 1.首先我们需要在QT的菜单栏中添加最近文档的选项,例如添加一个“最近打开”的下拉菜…

    other 2023年6月26日
    00
  • python变量的作用域是什么

    Python变量的作用域 在Python中,变量的作用域指的是变量在程序中可访问的范围。Python中有四种不同的作用域:全局作用域、局部作用域、嵌套作用域和内置作用域。在理解这些作用域之前,我们先来看两个示例。 示例一:全局作用域 全局作用域是在整个程序中都可访问的作用域。在全局作用域中定义的变量可以在程序的任何地方使用。 x = 10 # 全局变量 de…

    other 2023年7月29日
    00
  • win10总是自动关机自动重启该怎么办?

    解决Win10自动关机自动重启的完整攻略 1. 原因分析 Win10自动关机自动重启的一般原因有以下几种: Windows Update导致的重启 蓝屏(BSOD)自动重启 电源计划设置问题 病毒、恶意软件感染 硬件问题 2. 解决方法 2.1 禁用自动重启 在Win10出现“自动重启”的情况时,首先可以尝试禁用自动重启的选项,从而查看重启前的错误信息。 点…

    other 2023年6月27日
    00
  • php限制ip地址范围的方法

    当使用PHP编写Web应用程序时,有时需要限制特定IP地址范围的访问。下面是一种常见的方法来实现这个目标: 获取访问者的IP地址:首先,我们需要获取访问者的IP地址。在PHP中,可以使用$_SERVER[‘REMOTE_ADDR’]来获取访问者的IP地址。这个变量包含了当前请求的客户端IP地址。 检查IP地址范围:接下来,我们需要检查访问者的IP地址是否在允…

    other 2023年7月31日
    00
合作推广
合作推广
分享本页
返回顶部