当前位置:首页 > VUE

vue实现 toast

2026-01-12 21:05:10VUE

Vue 实现 Toast 的方法

使用第三方库(推荐)

安装 vue-toastification 库,这是一个功能丰富且易于使用的 Vue Toast 插件。

npm install vue-toastification

在 Vue 项目中全局注册插件:

import Toast from 'vue-toastification'
import 'vue-toastification/dist/index.css'

const app = createApp(App)
app.use(Toast)

在组件中使用 Toast:

this.$toast.success('操作成功')
this.$toast.error('操作失败')
this.$toast.info('提示信息')
this.$toast.warning('警告信息')

自定义 Toast 组件

创建一个可复用的 Toast 组件,适合简单需求。

Toast.vue

<template>
  <div v-if="show" class="toast">
    {{ message }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: false,
      message: ''
    }
  },
  methods: {
    showToast(message, duration = 2000) {
      this.message = message
      this.show = true
      setTimeout(() => {
        this.show = false
      }, duration)
    }
  }
}
</script>

<style>
.toast {
  position: fixed;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  background: rgba(0, 0, 0, 0.7);
  color: white;
  padding: 10px 20px;
  border-radius: 4px;
  z-index: 9999;
}
</style>

在组件中使用

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

export default {
  components: { Toast },
  methods: {
    showToast() {
      this.$refs.toast.showToast('自定义Toast消息')
    }
  }
}

使用 Vue 的 provide/inject

通过 provide/inject 实现全局 Toast 功能。

main.js

import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)

app.provide('toast', {
  show(message, duration = 2000) {
    const toast = document.createElement('div')
    toast.className = 'toast'
    toast.textContent = message
    document.body.appendChild(toast)
    setTimeout(() => {
      document.body.removeChild(toast)
    }, duration)
  }
})

app.mount('#app')

在组件中使用

export default {
  inject: ['toast'],
  methods: {
    showToast() {
      this.toast.show('通过provide/inject实现的Toast')
    }
  }
}

使用 Vue 3 Composition API

在 Vue 3 中可以使用 Composition API 创建更灵活的 Toast。

useToast.js

import { ref } from 'vue'

export default function useToast() {
  const toast = ref({
    show: false,
    message: ''
  })

  const showToast = (message, duration = 2000) => {
    toast.value.show = true
    toast.value.message = message
    setTimeout(() => {
      toast.value.show = false
    }, duration)
  }

  return { toast, showToast }
}

在组件中使用

vue实现 toast

<template>
  <div v-if="toast.show" class="toast">
    {{ toast.message }}
  </div>
</template>

<script>
import useToast from '@/composables/useToast'

export default {
  setup() {
    const { toast, showToast } = useToast()

    return { toast, showToast }
  }
}
</script>

以上方法提供了不同复杂度的 Toast 实现方案,可以根据项目需求选择合适的方案。第三方库方案功能最完善,自定义组件方案灵活性最高。

标签: vuetoast
分享给朋友:

相关文章

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…

vue 实现遮罩

vue 实现遮罩

Vue 实现遮罩层的方法 使用固定定位和透明背景 在Vue中实现遮罩层可以通过CSS固定定位结合透明背景色完成。创建一个全屏遮罩组件,利用position: fixed覆盖整个视窗。 <tem…

vue实现标注

vue实现标注

Vue 实现标注功能的方法 使用 Vue 实现标注功能可以通过多种方式实现,以下介绍几种常见的方法: 1. 使用 HTML5 Canvas 实现标注 Canvas 提供了强大的绘图能力,适合实现复…

vue 实现文字滚动

vue 实现文字滚动

Vue 实现文字滚动效果 使用CSS动画实现 通过CSS的@keyframes和transform属性实现文字滚动效果: <template> <div class="scro…