使用vuetify实现全局v-alert消息通知的方法

 更新时间:2024年02月29日 15:29:31   作者:DingDangDog  
使用强大的Vuetify开发前端页面,结果发现官方没有提供简便的全局消息通知组件,所以自己动手写了一个简单的组件,接下来通过本文给大家介绍使用vuetify实现全局v-alert消息通知的详细代码,感兴趣的朋友跟随小编一起看看吧

简介

使用强大的Vuetify开发前端页面,结果发现官方没有提供简便的全局消息通知组件(像Element中的ElMessage那样),所以自己动手写了一个简单的组件,效果如下:

PS:如果是我没找到官方版本,请评论告诉我!下面直接上代码

组件封装

全局变量:alert.ts

该文件可视为util文件,但我将其放在了stores文件夹下,主要提供了两个作用:

  • 定义newAlert全局变量,用于临时存储新Alert信息。
  • 定义常用的全局方法,用于快速创建alert,如:successAlerterrorAlert等。
import { ref } from 'vue'
export interface AlertInfo {
  id: string,
  type: string,
  message: string
}
export const newAlert = ref<AlertInfo>({
  id: 'alert' + 0,
  type: '',
  message: ''
})
export const alert = (type: string, message: string) => {
  newAlert.value.id = Math.random().toString()
  newAlert.value.type = type
  newAlert.value.message = message
}
export const errorAlert = (message: string) => {
  alert('error', message)
}
export const successAlert = (message: string) => {
  alert('success', message)
}
export const infoAlert = (message: string) => {
  alert('info', message)
}
export const warningAlert = (message: string) => {
  alert('warning', message)
}

组件:GlobalAlert.vue

该文件是v-alert二次封装的组件,主要提供了以下几个功能:

  • 监听newAlert值的变化,当值变化时,根据当时newAlert更新alertMap
  • 遍历alertMap创建多个v-alert
  • 定时删除历史v-alert
  • css定义v-alert的显示位置。
<script setup lang="ts">
import { ref, watch } from 'vue'
import { type AlertInfo, newAlert } from '@/stores/alert'
// 定义 Map,存储Alert信息集合,使用Map便于删除
const alertMap = ref<Map<string, AlertInfo>>(new Map)
// 监听新Alert创建
watch(newAlert.value, () => {
  alertMap.value.set(newAlert.value.id, { ...newAlert.value })
  console.log(alertMap.value)
  deleteAlert(newAlert.value.id)
})
const deleteAlert = (id: string) => {
  console.log(id)
  setTimeout(() => {
    alertMap.value.delete(id)
  }, 3000)
}
</script>
<template>
  <div class="alert-container">
    <v-alert
      class="v-alert"
      v-for="(alert, index) in Array.from(alertMap.values())"
      :key="index"
      :type="alert.type"
      border="start"
      variant="tonal"
      closable
      close-label="Close Alert"
      :text="alert.message"
    >
    </v-alert>
  </div>
</template>
<style scoped>
.alert-container {
  position: absolute;
  top: 8%;
  right: 5%;
}
.v-alert {
  margin-top: 0.2rem !important;
}
</style>

调用测试

有了以上两个文件后,即可调用测试

引用组件

  • 要想全局显示通知,则需要在项目顶层文件中引用该组件,我是在App.vue中引用,如下:
<script setup lang="ts">
import { RouterView } from 'vue-router'
// 引用GlobalAlert
import GlobalAlert from '@/components/GlobalAlert.vue'
</script>
<template>
    // 引用GlobalAlert
  <GlobalAlert />
  <RouterView />
</template>
<style scoped>
</style>

调用工具方法

  • 组件引用后,即可在项目任意地方调用工具方法测试效果,调用方式如下:
<script setup lang="ts">
// 引入封装好的工具方法
import { successAlert, errorAlert, infoAlert, warningAlert } from '@/stores/alert'
</script>
<template>
  <!-- 按钮直接调用测试 -->
  <v-btn variant="tonal"
         @click="successAlert('success')">
    success
  </v-btn>
  <v-btn variant="tonal"
         @click="errorAlert('error')">
    error
  </v-btn>
  <v-btn variant="tonal"
         @click="infoAlert('info')">
    info
  </v-btn>
  <v-btn variant="tonal"
         @click="warningAlert('warning')">
    warning
  </v-btn>
</template>
<style scoped>
</style>

可能存在的问题

  • 可能存在并发问题:没有进行并发测试;
  • 可能存在响应式问题:本示例仅在桌面端测试过,可能无法适配手机、平板等终端;

参考资料

到此这篇关于使用vuetify实现全局v-alert消息通知的方法的文章就介绍到这了,更多相关vuetify 全局v-alert消息通知内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue动态类名及动态样式设置方式:class/:style

    vue动态类名及动态样式设置方式:class/:style

    文章主要介绍了在Vue中设置动态类名(:class)和动态样式(:style)的方法,动态类名方面,使用三元表达式、结合过滤器和计算属性等方法进行设置,动态样式方面,介绍了基础用法、结合计算属性和三元表达式进行设置等方法
    2022-05-05
  • vue中的el-form表单rule校验问题(特殊字符、中文、数字等)

    vue中的el-form表单rule校验问题(特殊字符、中文、数字等)

    这篇文章主要介绍了vue中的el-form表单rule校验问题(特殊字符、中文、数字等),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Vue.js教程之计算属性

    Vue.js教程之计算属性

    Vue.js 的内联表达式非常方便,但它最合适的使用场景是简单的布尔操作或字符串拼接。这篇文章给大家介绍了Vue.js教程之计算属性,非常不错,感兴趣的的朋友一起看看吧
    2016-11-11
  • vue中axios解决跨域问题和拦截器的使用方法

    vue中axios解决跨域问题和拦截器的使用方法

    下面小编就为大家分享一篇vue中axios解决跨域问题和拦截器的使用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 深入了解Vue3中props的原理与使用

    深入了解Vue3中props的原理与使用

    props指父组件往子组件中传入参数,这篇文章主要为大家介绍了vue3中props的原理与使用,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-05-05
  • vue项目引入svg图标的完整步骤

    vue项目引入svg图标的完整步骤

    在实际的项目开发中,使用svg图标占用内存比图片更小,映入图片内存比较大,同时也适用于不同屏幕的尺寸,下面这篇文章主要给大家介绍了关于vue项目引入svg图标的完整步骤,需要的朋友可以参考下
    2022-10-10
  • Vue如何实现u-form多个form表单同时校验

    Vue如何实现u-form多个form表单同时校验

    在 Vue 项目中使用 UView UI 的 u-form 组件时,多个表单同时校验的需求非常常见,本文主要介绍了如何使用 u-form 组件实现多个表单同时校验,需要的可以参考一下
    2025-01-01
  • Vue中slot的使用详解

    Vue中slot的使用详解

    这篇文章主要介绍了Vue中slot的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • vue二次封装一个高频可复用组件的全过程

    vue二次封装一个高频可复用组件的全过程

    在开发Vue项目我们一般使用第三方UI组件库进行开发,但是这些组件提供的接口并不一定满足我们的需求,这时我们可以通过对组件库组件的二次封装,来满足我们特殊的需求,这篇文章主要给大家介绍了关于vue二次封装一个高频可复用组件的相关资料,需要的朋友可以参考下
    2022-10-10
  • Vue打包项目并部署到Linux服务器中的全过程

    Vue打包项目并部署到Linux服务器中的全过程

    文章介绍了如何使用Vue进行项目打包,并部署到Linux服务器上,包括配置vue.config.js文件、创建config.js文件以更改请求地址、封装axios请求、打包命令、部署到服务器、配置nginx以及隐藏后台服务地址的方法
    2026-02-02

最新评论