在Vue中基于elementUI二次封装messagebox

本文介绍如何在Vue项目中基于Element UI的messageBox组件进行二次封装,以实现自定义提示框显示效果及自动关闭功能,并防止重复点击按钮触发多次请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Vue 中基于elementUI二次封装messagebox

需求描述
为了解决频繁点击某按钮不断触发事件调接口弹出提示语的问题,项目中希望可以在第一次点击调用接口成功之后弹出弹框类提示语并在3秒后自动消失,提示语未消失的情况下不能再次点击,为此,我基于elementui的messagebox进行了二次封装。(样式简略意思一下)

在这里插入图片描述
在这里插入图片描述

一、封装confirm.js
/** confirm.js */
import Vue from 'vue';
import { MessageBox } from 'element-ui'
// 传入参数:提示语 持续时间 提示语类型
function handleConfirm(msg="",duration=1000,type="success") {//设置默认值
    if(type=='success'){
      var str = `<p style="color:#1aa365;font-size:18px">${msg}</p>`;
    }else{
      var str = `<p style="color:#E71C1C;font-size:18px">${msg}</p>`;
    }
     MessageBox.confirm(str, "", {
        dangerouslyUseHTMLString: true, //是否将 message 属性作为 HTML 片段处理
        showConfirmButton: false, //去掉确定按钮
        showCancelButton: false, //去掉取消按钮
        center: true,
        showClose: false,
      })
      .then(() => {
        // 此处可再调一次查询方法
      })
      .catch((err) => {console.log(err);});
      return new Promise((resolve,reject)=>{
      setTimeout(()=> {
        let closeBtn =document.body.getElementsByClassName("v-modal")[0];
        closeBtn.click();
          resolve();
          }, duration);
      })
}
function registryConfirm() {
  // 将组件注册到 vue 的 原型链里去,
  // 这样就可以在所有 vue 的实例里面使用 this.$toConfirm() //避免影响原项目的其他已用到了$confirm的地方,起名错开
  Vue.prototype.$toConfirm = handleConfirm
}
export default registryConfirm;

二、在入口文件main.js处引入
import registryConfirm from '@/common/confirm.js';
Vue.use(registryConfirm)
三、在组件中使用
this.axios
.post(
this.http + "...",
this.qs.stringify(data)
)
.then((res) => {
// console.log('登录成返回的数据' , res);
if (res.code == 0) {             
    this.$toConfirm(res.msg,3000,'success')
} else {
    this.$toConfirm(res.msg,3000,'error')
}
})
.catch((err) => {
console.log(err);
});
ElMessageBox是Element Plus库中的一个组件,用于显示弹出框。根据引用\[1\],可以在Vue项目中通过导入ElMessageBox组件来使用它。例如,可以使用ElMessageBox.confirm方法来显示一个确认对话框,其中包含一个提示信息和两个按钮(确定和取消)。在点击确定按钮后,可以执行相应的操作,而在点击取消按钮后,可以执行另外的操作。这样可以实现在特定情况下显示弹出框并根据用户的选择执行相应的逻辑。根据引用\[2\],有时候我们可能需要对ElMessageBox进行二次封装,以满足特定的需求,比如在第一次点击后弹出提示框并在一定时间后自动消失。这样的封装可以提高代码的复用性和扩展性。根据引用\[3\],封装一个模态框组件的重要性很高,因为它可以在不影响复用性和扩展性的前提下,提供更多的自定义功能。因此,如果需要自定义封装一个支持在template中使用,又支持在js代码中直接调用的对话框,可以参考整个大纲中的渐进步骤,以实现所需的功能。 #### 引用[.reference_title] - *1* *3* [Vue3 优雅的模态框封装方案 - 初探](https://blog.youkuaiyun.com/leg_hair_king/article/details/118034772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [在Vue中基于elementUI二次封装messagebox](https://blog.youkuaiyun.com/weixin_38680881/article/details/118034178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值