首页 > 其他分享 >Vue2 Modal组件函数式调用封装(基于Ant Design Vue 组件)

Vue2 Modal组件函数式调用封装(基于Ant Design Vue 组件)

时间:2023-09-15 14:48:56浏览次数:63  
标签:... const Vue2 Ant Modal props 组件 childConfig modalProps

一、h函数(createElement函数)版本

import Vue from "vue";
import { Modal } from "ant-design-vue";

// 获取扩展 Modal 组件
function getModalConstructor(modalProps, childConfig) {
  const { component, ...restConfig } = childConfig;
  return Vue.extend({
    // 添加模态框内的内容
    render(h) {
      return h(
        Modal,
        {
          props: {
            visible: true, // 控制模态框显示
            footer: null, // 底部内容
            // 其他 Modal props
            ...modalProps,
          },
          on: {
            // 监听取消事件
            cancel: () => {
              this.$destroy(); // 销毁实例
            },
          },
        },
        [
          // 在模态框中添加子组件
          h(component, {
            props: {
              ...restConfig.props,
            },
            on: {
              // 子组件内部可通过调用 this.$emit("closeModal"),关闭Modal
              closeModal: () => {
                this.$destroy();
              },
              ...restConfig.on,
            },
          }),
        ]
      );
    },
  });
}

export default function createModal(modalProps, childConfig) {
  const ModalConstructor = getModalConstructor(modalProps, childConfig);
  const instance = new ModalConstructor().$mount();
  document.body.appendChild(instance.$el);
}

二、JSX版本

import Vue from "vue";
import { Modal } from "ant-design-vue";

// 获取扩展 Modal 组件
function getModalConstructor(modalProps, childConfig) {
  const { component, ...restConfig } = childConfig;
  console.log(component, restConfig);
  return Vue.extend({
    // 添加模态框内的内容
    render() {
      // 模态框配置
      const modalConfig = {
        props: {
          visible: true, // 控制模态框显示
          footer: null, // 底部内容
          // 其他 Modal props
          ...modalProps,
        },
        on: {
          // 监听取消事件
          cancel: () => {
            this.$destroy(); // 销毁实例
          },
        },
      };
      // 子组件配置
      const childConfig = {
        props: {
          ...restConfig.props,
        },
        on: {
          // 子组件内部可通过调用 this.$emit("closeModal"),关闭Modal
          closeModal: () => {
            this.$destroy();
          },
          ...restConfig.on,
        },
      };
      return (
        <Modal {...modalConfig}>
          <component {...childConfig} />
        </Modal>
      );
    },
  });
}

export default function createModal(modalProps, childConfig) {
  const ModalConstructor = getModalConstructor(modalProps, childConfig);
  const instance = new ModalConstructor().$mount();
  document.body.appendChild(instance.$el);
}

标签:...,const,Vue2,Ant,Modal,props,组件,childConfig,modalProps
From: https://www.cnblogs.com/huangtq/p/17704961.html

相关文章

  • 从零开始使用vue2+element搭建后台管理系统(主页)
    登录后,应有一个主页,可以展示当前用户的一些信息,例如上次登录时间地点、修改手机号、重置密码等简单功能,如图:  首先在views下新建HomeView.vue文件:<template><el-row><el-col:span="24"><!--user卡片--><el-card><divclass="user"&g......
  • 通过UltraSync减轻主节点负担、提升业务系统性能,AntDB如何做到?
    众所周知,数据库在多中心场景下,主中心主库不仅要承担原本业务的压力,而且还要将redo日志传输到不同的备库端,这样对主库将产生很大的性能影响。通常情况下,备中心和主中心不在同⼀机房,为了保证业务响应速度,主中心主节点和备中心各主节点之间的复制流通常是异步的,当主中心发生故障时,主......
  • HarmonyOS应用开发Web组件基本属性应用和事件
     一、Web组件概述Web组件用于在应用程序中显示Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。● 页面加载:Web组件提供基础的前端页面加载的能力,包括加载网络页面、本地页面、Html格式文本数据。● 页面交互:Web组件提供丰富的页面交互的方式,包括:设置前端页......
  • 经纬恒润48V BMS助力Stellantis量产落地
        近日,搭载经纬恒润48V电池管理系统(BatteryManagementSystem,BMS)的Stellantis某车型已量产落地。该车型主要面向欧洲市场,针对短距离家庭代步提供更便捷的出行方式。    在与Stellantis的合作中,经纬恒润提供了高效的电池管理系统平台,并通过多年在新能源电池管......
  • 界面组件DevExpress WinForms v23.1亮点 - 全新升级HTML & CSS模板
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForm 控件已正式发布v23.1版本,此版......
  • vue2.0 表单验证明明有值却提示错误
    明明有值却总是提示为空我的解决方法时将number转为字符串验证方法如图:(验证只可以输入数字)赋值时转为字符串: ......
  • ansible-playbook各个组件
    1.ansible-playbook组件ansible-playbook主要的组件有:hosts:主机列表remote_user远程用户tasks:任务variables:变量templates:模板handlers和notity:触发器tags:标签2.ansible-playbookhosts组件ansible远程执行playbook指定任务的主机列表,需事先在hosts文件中指定主机列......
  • antui-alipay风格的移动网页设计
    地址:antui.alipay.com需要加入的一些js控制,见https://myjsapi.alipay.com/fe/preset-assets.html参考代码:<!DOCTYPEhtml><!--A11Y:注意设置页面的lang属性--><htmllang="zh"><head><metacharset="utf-8"/><!--A11Y:打开页......
  • markdown画图组件-mermaid
    风险名单业务系统,查询,名单,核实数据数据来源导入-外部系统sequenceDiagram名单系统->>数据仓库:获取文件数据仓库-->>名单系统:返回文件名单系统->>名单系统:更新存量名单维护-本系统管理管理申诉抗辩sequenceDiagramparticipant信贷系统as调用......
  • Vue学习四:组件的三大组成部分、组件通信和进阶语法
    一、组件的三大组成部分<template>里面只能有一个根元素<style>全局样式(默认):影响所有组件局部样式:scoped下样式,只作用于当前组件<script>el根实例独有,data是一个函数,其他配置项一致二、scoped设置局部样式默认情况:写在组件中的样式会全局生效→因此很容易造成多......