Vue3封装 Message消息提示实例函数

2023-11-09

Vue3封装 消息提示实例函数

实现效果
在这里插入图片描述

  • Vue2.0使用 Vue.prototype.$message = function () {}
  • vue3.0使用app.config.globalProperties挂载原型方法app.config.globalProperties.$message = Message
  • 也支持直接导入函数使用 import Message from './Message.js

样式布局封装 message.vue

<template>
  <Transition name="down">
    <div class="my-message" :style="style[type]" v-show='isShow'>
      <!-- 上面绑定的是样式 -->
      <!-- 不同提示图标会变 -->
      <i class="iconfont" :class="[style[type].icon]"></i>
      <span class="text">{{text}}</span>
    </div>
  </Transition>
</template>
<script>
import { onMounted, ref } from 'vue'

export default {
  name: 'myMessage',
  props: {
    text: {
      type: String,
      default: ''
    },
    type: {
      type: String,
      // warn 警告  error 错误  success 成功
      default: 'warn'
    }
  },
  setup () {
    // 定义一个对象,包含三种情况的样式,对象key就是类型字符串
    const style = {
      warn: {
        icon: 'icon-warning',
        color: '#E6A23C',
        backgroundColor: 'rgb(253, 246, 236)',
        borderColor: 'rgb(250, 236, 216)'
      },
      error: {
        icon: 'icon-shanchu',
        color: '#F56C6C',
        backgroundColor: 'rgb(254, 240, 240)',
        borderColor: 'rgb(253, 226, 226)'
      },
      success: {
        icon: 'icon-queren2',
        color: '#67C23A',
        backgroundColor: 'rgb(240, 249, 235)',
        borderColor: 'rgb(225, 243, 216)'
      }
    }
    // 控制动画
    const isShow = ref(false)
    // 组件模板渲染成功后触发
    onMounted(() => {
      isShow.value = true
    })
    return { style, isShow }
  }
}
</script>
<style scoped lang="less">
.down {
  &-enter {
    &-from {
      transform: translate3d(0, -75px, 0);
      opacity: 0;
    }
    &-active {
      transition: all 0.5s;
    }
    &-to {
      transform: none;
      opacity: 1;
    }
  }
}
.my-message {
  width: 300px;
  height: 50px;
  position: fixed;
  z-index: 9999;
  left: 50%;
  margin-left: -150px;
  top: 25px;
  line-height: 50px;
  padding: 0 25px;
  border: 1px solid #e4e4e4;
  background: #f5f5f5;
  color: #999;
  border-radius: 4px;
  i {
    margin-right: 4px;
    vertical-align: middle;
  }
  .text {
    vertical-align: middle;
  }
}
</style>

功能实现 message.js

//图标
// 文本
import { createVNode,render } from 'vue'
import myMessage from './message.vue'
// 动态创建一个DOM容器
const div=document.createElement('div')
div.setAttribute('class','my-message-container')
document.body.appendChild(div)
export default ({text,type})=>{
  let timer=null
  //createVNode 用于创建一个虚拟节点
  // 参数1 支持组件
  // 参数2 表示传递给组件的选项
const vnode= createVNode(myMessage,{text, type})
//把虚拟的节点渲染到页面的DOM中即可
// render函数的参数
//参数一:表示表示需要渲染的内容(虚拟节点)
// 参数二:表示渲染的目标位置 (DOM元素)
   render(vnode,div)
 // 希望1s后消失
  clearTimeout(timer)
   timer=setTimeout(()=>{
     // 清空div里面的内容
      render(null,div)
   },1000)
}
// $message({ text: '登录失败', type: 'error'})

注册 自定义指令

import Message from './Message.js'
export default {
  install(app){
  // 如果你想挂载全局的属性,能够通过组件实例调用的属性 this.$message
     // 扩展一个实例方法
      app.config.globalProperties.$message = Message // 原型函数
  }
}

使用 :

  • 方法一

  • import Message from './message.js'
    setup(){
      Message({ text: '登录失败', type: 'error' })
    }
    
  • 方法二

// setup函数中访问组件实例对象 
    import { getCurrentInstance } from 'vue'
   setup(){
     const instance= getCurrentInstance()
     instance.proxy.$message({ text: '登录失败', type: 'error' })
   } 
  • 方法三 this.$message

    this.$message({ text: '登录失败', type: 'error' })
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3封装 Message消息提示实例函数 的相关文章

  • 如何在卡组bootstrap vue上设置行列?

    我的 vue 组件是这样的
  • Vue js按钮冻结dom

    我试图在按下按钮时切换包含加载动画的跨度 直到使用 v if 函数完成 但是当我按下按钮时 DOM 冻结并且 span 元素保持不变 直到函数调用结束 如何让 DOM 不冻结并显示加载图标 非阻塞按钮按下可能是一个解决方案 HTML
  • 如何在Vuejs中动态管理页面标题?

    我构建一个应用程序 我有一个带有页面标题的标题 目前 我使用视图路由器来定义我的标题 path events name events component Events meta title Liste des v nements 在我的刀片
  • Vue 3 控制台中的 Proxy 是什么意思?

    我正在对数组进行洗牌 并在控制台中收到一条奇怪的消息 我的 JSON 文件如下所示 id 1 name Sushi image https images pexels com photos 1640777 pexels photo 1640
  • 如何在Vue3中对setup的内部函数(不是返回)进行单元测试?

    我想这样测试 情况1 错误 无法监视内部属性 因为它不是函数 改为未定义 组件 vue export default setup function outer inner function inner do something for on
  • Web 扩展中共享 vuex 状态(死对象问题)

    我正在尝试在网络扩展中使用共享的 vue js 状态 状态存储在后台脚本的 DOM 中并呈现在弹出页面中 第一次尝试 我的第一次尝试是使用一个没有 vuex 的简单商店 背景 js var store count 0 popup js br
  • 如何修复套接字 io 中的 400 错误错误请求?

    我有一个前端应用程序 VUE JS 我有一个后端 Nest JS Vue JS 应用程序使用 vue socket io extended 库通过 websockets 从后端获取数据 当 Vue JS 应用程序启动时 我在浏览器中看到错误
  • 如何在Vue中提交表单,重定向到新路由并传递参数?

    我正在使用 Nuxt 和 Vue 我正在尝试提交表单 将用户重定向到包含提交的参数的新路由 发送 API 请求以获取一些数据 然后渲染该数据 我通过简单地将表单操作设置为新路径并手动将所有 URL 参数添加到 API 请求来实现此目的 首先
  • 无法使用Vue获取灵活元素的CSS属性值

    我正在尝试获取 CSSwidth灵活元素的属性 但由于某种原因它不起作用 代码笔 https codepen io anon pen pLEwdp editors 1010 https codepen io anon pen pLEwdp
  • 不使用Vue可以使用Vuex吗? (Vuex 服务器端?)

    Vuex 抱怨如果不调用 Vue use Vuex 就无法创建新的 store 实例 虽然这通常没问题 但我正在摆弄使用同一商店编写后端 前端的想法 有人知道答案吗 Thanks TL DR 你可以在 Node 中完美使用 Vuex 无需浏
  • vue如何检测页面是否刷新?

    我尝试这样 created window addEventListener beforeunload function event event returnValue Write something this router push 像这样
  • 如何将 Jitsi Meet 添加到 Vuejs

    我已在 public html 的正文中加载了 jitsi meet 脚本 并且我有一个组件 如下所示
  • Vuetify 自动完成类似项目未显示

    我的本地案例中有类似标题的自定义帖子API我尝试通过搜索查询显示帖子items array Data count 5 entries id 3 title Senior developer Python id 4 title Senior
  • Mapbox JS SDK CSS样式表导致地图消失

    我在 VueJS 应用程序中使用 Mapbox JavaScript SDK 我可以毫无问题地显示地图 现在我想添加一些标记 我懂了在本页 https docs mapbox com mapbox gl js api 您需要先导入 CSS
  • 如何以编程方式启动 Vuetify 对话框并等待响应

    我对 Vue js 和 Vuetify 相当陌生 使用 AngularJS 好几年了 但我们公司正在转向 Vue js 我想要完成的是 当用户单击 登录 按钮时 它会执行一些检查 即用户名不能为空 并启动 Vuetify 对话框来提醒用户
  • 从组件传递数据

    我对 Vue 相当陌生 我正在尝试将数据从组件传递到视图 我不确定我是否在使用props正确的 我有一个对话框 当我保存时 我想将数据插入数据库 我也想重复使用addCustomer function 这就是为什么我没有将该函数放置在组件中
  • 在渲染组件之前从 api 获取数据

    我在渲染页面之前发送 2 个 api 请求 const Profile template profile attributes null photos data function return attributes Profile attr
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • Vue警告无法解析组件:ion-icon

    以下的用法如下https ionicons com usage https ionicons com usage the ion icon显示但我收到此警告 Failed to resolve component ion icon 我的步骤
  • 如何将vue组件插入到contenteditable div中

    我想用 vue 创建简单的所见即所得编辑器 我发现只有一个在 vue js 上创建的真正的所见即所得编辑器 这里是 https quasar dev vue components editor 但我没有发现有插入图像的能力 其他 vue w

随机推荐

  • [游戏开发]Unity业务代码自动生成工具

    前言 项目里有非常多的重复代码 例如UI业务逻辑 一般来说都会生成Manager Module View层代码 这是基本的MVC架构 Manger层 负责数据维护 对照Proto把CS和SC通信代码都写上 Module层 如果有变化则从Ma
  • 《Java基础篇》JavaBean的生命周期·作用域·通俗易懂

    1 基本概念 bean 就是由IOC 容器初始化 装配及管理的对象 Spring中的bean默认都是单例的 那么单例Bean在多线程程序下如何保证线程安全呢 Spring的单例是基于BeanFactory也就是Spring容器的 单例Bea
  • 西门子PLC入门-PLC介绍

    PLC全名 可编程逻辑控制器 Programmable Logic Controller 一种具有微处理器的用于自动化控制的数字运算控制器 可以将控制指令随时载入内存进行储存与执行 PLC由CPU 指令及数据内存 输入 输出接口 电源 数字
  • Java并发编程面试题

    基础知识 并发编程的优缺点 为什么要使用并发编程 并发编程的优点 充分利用多核CPU的计算能力 通过并发编程的形式可以将多核CPU的计算能力发挥到极致 性能得到提升 方便进行业务拆分 提升系统并发能力和性能 在特殊的业务场景下 先天的就适合
  • Hive中not in函数的小坑 :含null时的判断

    Hive中的not in函数有一个隐藏的陷阱 当not in 中的数值包含NULL 匹不上的数据会返回NULL而不是True 所以当在where中使用not in子查询进行筛选 一定要记得去除NULL值 样例代码 not in的原始结果 s
  • 打开文件,读取TXT

  • 通过HttpURLConnection连接上传文件和参数并接收

    网上使用HttpURLConnection通过get或post请求传递参数或者传递文件的例子有很多 但是同时传递参数和文件 服务的并接收参数和文件的例子很少 此文将介绍同时发送参数和文件并接收 1 HttpURLConnection简介 任
  • 产品经理的思考-我们是技术的主人吗?

    思考的起源 最近在准备公司内部的研发大会的汇报时 发现我们组的成员都跟我一样 是技术出身 在努力或者被迫努力的往技术产品经理的维度转变 晚上准备PPT到凌晨三点多 在最后收尾的时候 脑海里突然有几个疑问 在技术维 我们是技术的主人还是技术的
  • LFSR:线性反馈移位寄存器及其应用

    LFSR简介 LFSR Linear feedback shift register 是一种特殊的的移位寄存器 他的输入取决于其先前状态 LFSR的使用异常广泛 可以说涉及到方方面面 以下是Wikipedia列举的一些应用 INTELSAT
  • jquery 计算时间差

    用正则 且精确到秒 function Days1 date1 date2 var date3 date1 getTime date2 getTime 时间差的毫秒数 计算出相差天数 var days Math floor date3 24
  • Vue3使用方法

    Vue3相比于Vue2 解决了 Vue2中新增属性 删除属性 界面不会更新的问题 解决了 Vue2中直接通过下标修改数组 界面不会刷新的问题 vue cli版本必须是4 5以上 查看版本命令 vue V 创建工程命令 vue create
  • PAT(甲级)1148 Werewolf - Simple Version(枚举)

    Description 狼人杀游戏 第几个人说第几个人是狼人或者是人 规定所有人中有两个狼人 其中只有一个狼人和一个人说谎 要求找出两个狼人 Input 第一行n 代表n个人 接下来n行 正数 Di 代表 第i个人说第Di人是human 负
  • 内网服务器外网连接SSH远程端口转发实战详解

    问题 前段时间在外地没有在实验室 随身携带了一个笔记本电脑 但是笔记本性能不够 想用SSH远程连接实验室的电脑 问如何连接 现有以下设备 设备 IP 备注 系统 实验室电脑C1 192 168 0 24 内网 可访问外网 SSH登陆端口为3
  • 人脸关键点检测与 MMPose

    一 任务划分 MMPose 是利用深度学习算法对人体姿态进行估计的算法库 而人体姿态估计 是指 从给定图像中识别人脸 手部 身体等关键点 其中 输入 图像 I 输出 所有关键点的像素坐标 x 1 y 1 x 2 y 2 x j y j 这里
  • 【计算机网络】实验6:cisco交换机配置 在PacketTracer中对交换机设备使用命令行(CLI)进行配置

    一 实验目的 1 了解交换机的基本配置命令 2 了解交换机的VLAN配置 二 实验内容 1 packet Tracer 配置Cisco交换机 2 VLAN的配置 1 Packet Tracer 配置Cisco交换机 要配置好Cisco交换机
  • aix ---lspv command

    lspv 列出os中所有的pv pvname pvid vgname status hdisk0 00c3f005d072189b rootvg active hdisk1 00c3f435d0f4916c rootvg active hd
  • 高级软件测试成长路线-hogwarts

    高级软件测试成长路线
  • Echarts给柱状统计图、进度图的字体及柱子加不同的颜色及阴影

    今天记录一个Echart统计图中的几个小知识点以及方法 写的不好 仅供参考 如有不恰当之处 劳烦留言交流 手动抱拳 原图入选所示第一张图 改造后的图是第二张 改造前 改造后 首先看到这个图的颜色 颜色的选择按照自己的喜好和统计图所应用的场景
  • 小程序云开发入门到实践:云函数的配置与部署

    目录 1 4 云函数的配置与部署 1 4 1 云函数的开发环境 1 下载安装Node js 1 4 2 部署并上传云函数
  • Vue3封装 Message消息提示实例函数

    Vue3封装 消息提示实例函数 实现效果 Vue2 0使用 Vue prototype message function vue3 0使用app config globalProperties挂载原型方法app config globalP