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日

相关文章

  • Win8怎么恢复系统 轻松重装Win8系统的方法(图文教程)

    Win8系统恢复与重装完整攻略 恢复系统 在某些情况下,我们可能需要恢复Win8系统到之前某一个时间点的状态,这时候就需要使用Win8自带的恢复工具。具体操作如下: 打开“控制面板”,点击“系统和安全”选项。 在“系统和安全”界面中,点击“文件历史记录”选项。 在“文件历史记录”界面中,点击“恢复个人文件”选项。 接下来会弹出“恢复文件”窗口,按照提示选择需…

    other 2023年6月20日
    00
  • C++文件IO流及stringstream流读写文件和字符串操作详解

    C++文件IO流及stringstream流读写文件和字符串操作详解 一、C++文件IO流 1. 什么是文件IO流? C++中提供了文件IO流,它是对磁盘文件进行输入输出的流,它提供了读写磁盘文件的功能。 2. C++文件IO流分类 C++的文件IO流分为两类: 输入流:用于从文件中读取数据,常用的有ifstream。 输出流:用于向文件中写入数据,常用的有…

    other 2023年6月26日
    00
  • Qt实现文本编辑器(一)

    Qt实现文本编辑器(一)攻略 介绍 本文将详细讲解如何使用Qt框架实现一个简单的文本编辑器。我们将使用Qt提供的QWidget进行界面设计,以及QTextEdit进行文本编辑功能的实现。 步骤 步骤一:创建Qt项目 我们首先需要创建一个新的Qt项目。打开Qt Creator,选择”File” -> “New File or Project”,在弹出的对…

    other 2023年6月28日
    00
  • Python多重继承之菱形继承的实例详解

    Python多重继承之菱形继承的实例详解 在Python面向对象编程中,可以通过继承来实现代码复用和代码结构的优化。而多重继承则是Python中一个独有的特性,其中菱形继承问题就是多重继承可能会带来的一个问题。在本文中,我们将详细讲解菱形继承问题及其解决方法,并提供两个示例说明。 什么是菱形继承 菱形继承指的是一个子类继承自两个父类,而这两个父类又继承自同一…

    other 2023年6月26日
    00
  • 苹果手机内存空间不足怎么清理

    苹果手机内存空间不足清理攻略 苹果手机内存空间不足可能会导致手机运行缓慢、应用崩溃等问题。为了解决这个问题,你可以采取以下步骤来清理手机内存空间。 1. 删除不需要的应用 首先,检查你的手机上是否有一些你不再使用或不需要的应用。这些应用可能占据了大量的内存空间。你可以按照以下步骤删除这些应用: 在主屏幕上找到并长按要删除的应用图标。 等到应用图标开始晃动并出…

    other 2023年7月31日
    00
  • 删除文件名是乱码或者带有特殊字符文件的方法步骤

    下面我给您详细讲解一下在Linux系统下如何删除文件名是乱码或者带有特殊字符的文件的攻略步骤: 查找到文件名所在的目录 在终端输入以下命令,找到文件名所在的目录: $ cd your/path/to/the/directory 查看乱码或特殊字符文件名 在目录中,使用以下命令来查看乱码或者包含特殊字符的文件名: $ ls -la | grep -i &quo…

    other 2023年6月26日
    00
  • 使用MyBatis-Generator如何自动生成映射文件

    以下是使用MyBatis-Generator自动生成映射文件的完整攻略: 配置MyBatis-Generator 在项目的pom.xml文件中添加MyBatis-Generator的依赖,并配置generatorConfig.xml文件。示例配置如下: xml <dependencies> <!– MyBatis-Generator依赖 …

    other 2023年10月14日
    00
  • oracleexadata体系笔记

    Oracle Exadata体系笔记 Oracle Exadata是Oracle公司推出的一款专用于数据处理的高性能、高可靠性的数据库机。它结合了Oracle数据库软件与硬件的优势,采用了多种特殊的硬件和软件优化,以提供极高的性能、可靠性和扩展性。 Exadata体系结构 Exadata机器的核心是存储服务器和计算服务器,它们通过Infiniband高速网络…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部