vue3+ElementPlus封装函数式弹窗组件详解

 更新时间:2023年08月09日 14:06:02   作者:奔跑的前端猿  
这篇文章主要为大家详细介绍了如何利用vue3和ElementPlus封装函数式弹窗组件,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

需求场景:弹窗组件需要支持自定义的插槽内容,删除的弹窗也要使用这个组件,只是样式不一样而已,希望在父组件使用删除弹窗的时候直接调用某个方法就可以显示弹窗

组件模拟 cuDialog

假设我的弹窗组件有以下的props和事件

  • dialogVisible:控制弹窗显示和隐藏
  • title:弹窗的标题
  • showClose:是否删除弹窗
  • handleClose:弹窗取消的事件
  • handleConfirm:弹窗确定的事件

新建一个js文件

这里需要使用vue3的createApp,方法实现函数式组件调用

1.导入需要的弹窗组件

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

2.创建两个全局变量(命名随意),一个是存储createApp创建的组件,一个是放组件的dom

let app = null; let div = null;

3.定义两个方法,一个是显示弹窗,一个是隐藏弹窗

我这里是把两个方法放在了一个对象里面,方便页面的调用,你们可以根据自己的喜好自由设计

const delMsg = {
  show:function() {},
  hide:function() {}
}

4.开始写显示弹窗的方法

首先需要确认show方法要接收的参数,参数的话就是前面列举的那些,三个props和两个事件

function show(props) {
  const { title = '温馨提示', delContent = '确定要删除所选记录吗?', confirm, close } = props;
    // 创建dom并插入到body中
  div = document.createElement('div');
  div.setAttribute('id', 'cu-dialog-id');
  document.body.appendChild(div);
  // 创建组件
  app = createApp(CuDialog, {
    title, // 弹窗的标题
    delContent, // 删除弹窗的内容
    dialogVisible: true, // 弹窗显示或隐藏
    showClose: true, // 是否删除弹窗
    // 弹窗组件暴露的取消事件handleClose
    onHandleClose: () => {
      close && close();
      console.log('触发函数内取消事件');
      app.unmount();
      div.remove();
    },
    // 弹窗组件暴露的取消事件handleConfirm
    onHandleConfirm: () => {
      confirm && confirm();
      console.log('触发函数内确认事件');
    }
  });
   app.mount(div);
}

5.隐藏弹窗方法

function hide() {
  app.unmount();
  div.remove();
}

6.导出方法

export default delMsg;

使用方法

import delMsg from '@utils/delMessage.js'
delMsg.show({title:'弹窗标题',delContent:'弹窗的内容',confirm:() =>{
  console.log('确认事件触发');
  delMsg.hide();
},close:() => {
  console.log('取消事件触发')
}})

完整代码

import CuDialog from '@/components/CuDialog.vue';
let app = null;
let div = null;
const delMsg = {
  /**
   * @param {Object} props
   * @param {String} title 弹窗的标题,不传默认 ‘温馨提示'
   * @param {String} delContent 弹窗的内容,不传默认 ‘确定要删除所选记录吗?'
   * @param {Boolean} autoClose 取消事件是否需要特殊处理,设置false需要手动调用hide方法,不传默认true
   * @param {Function} confirm 弹窗确认事件
   * @param {Function} close 弹窗关闭事件
   */
  show: function (props) {
    const { title = '温馨提示', delContent = '确定要删除所选记录吗?', autoClose = true, confirm, close } = props;
    div = document.createElement('div');
    div.setAttribute('id', 'cu-dialog-id');
    document.body.appendChild(div);
    // eslint-disable-next-line vue/one-component-per-file
    app = createApp(CuDialog, {
      title,
      delContent,
      dialogVisible: true,
      showClose: true,
      onHandleClose: () => {
        close && close();
        console.log('触发函数内取消事件');
        // 如果需要默认关闭,不做任何逻辑处理请将autoClose设置为true(默认就是true)
        if (autoClose) {
          app.unmount();
          div.remove();
        }
      },
      onHandleConfirm: () => {
        confirm && confirm();
        console.log('触发函数内确认事件');
      }
    });
    app.mount(div);
  },
  hide: function () {
    app.unmount();
    div.remove();
  }
};
export default delMsg;

到此这篇关于vue3+ElementPlus封装函数式弹窗组件详解的文章就介绍到这了,更多相关vue ElementPlus弹窗组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • vue脚手架搭建/idea执行vue项目全过程

    vue脚手架搭建/idea执行vue项目全过程

    新建目录并运行命令提示符,通过npm安装Vue脚手架并查看版本号,接着,使用vue create命令创建Vue项目,选择所需配置后完成项目创建,创建成功可见Vue文件夹,使用IDEA打开项目,并启动项目,根据需求修改初始化界面
    2024-10-10
  • element-ui select多选绑定回显值问题

    element-ui select多选绑定回显值问题

    这篇文章主要介绍了element-ui select多选绑定回显值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    这篇文章主要介绍了 Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • vue监听路由变化的几种方式小结

    vue监听路由变化的几种方式小结

    这篇文章主要介绍了vue监听路由变化的几种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 3分钟迅速学会Vue中methods方法使用技巧

    3分钟迅速学会Vue中methods方法使用技巧

    最近在学习Vue,感觉methods还是有必有总结一下的,下面这篇文章主要给大家介绍了关于3分钟迅速学会Vue中methods方法使用技巧的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Vue中forEach()的使用方法例子

    Vue中forEach()的使用方法例子

    这篇文章主要给大家介绍了关于Vue中forEach()使用方法的相关资料,forEach和map是数组的两个方法,作用都是遍历数组,在vue项目的处理数据中经常会用到,需要的朋友可以参考下
    2023-09-09
  • elementUI给el-tabs/el-tab-pane添加图标效果实例

    elementUI给el-tabs/el-tab-pane添加图标效果实例

    这篇文章主要给大家介绍了关于elementUI给el-tabs/el-tab-pane添加图标效果实例的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用elementUI具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • Vue项目中vue.config.js常用配置项详解

    Vue项目中vue.config.js常用配置项详解

    在 Vue CLI 创建的项目中,vue.config.js 是核心配置文件,用于定制化构建、开发和部署流程,本文详细解析了该文件的常用配置项,并结合代码示例和表格说明,帮助开发者高效管理项目配置,提升开发体验,需要的朋友可以参考下
    2025-04-04
  • 对vux点击事件的优化详解

    对vux点击事件的优化详解

    今天小编就为大家分享一篇对vux点击事件的优化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • VSCode中写Vue没有代码提示的解决步骤(附图文)

    VSCode中写Vue没有代码提示的解决步骤(附图文)

    这篇文章主要给大家介绍了关于VSCode中写Vue没有代码提示的解决步骤,代码提示功能能够大大的提高开发效率,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-09-09

最新评论