Vue 3 Element Plus 自定义弹出框组件实践

16,555次阅读
没有评论

共计 2333 个字符,预计需要花费 6 分钟才能阅读完成。

Vue 3 + Element Plus 自定义弹出框组件实践

在 Vue 3 项目中,使用 Element Plus 构建弹出框是一项常见的任务。为了简化这个过程,我们可以封装一个公共组件,使弹出框的调用变得简单而高效。本文将介绍如何通过 Vue 3 和 Element Plus,使用一个自定义的弹出框组件实现这一目标。

1. 弹出框组件封装

首先,我们封装了一个通用的弹出框组件,具体实现位于 util.js 文件中。通过 initInstance 方法,我们可以动态创建一个弹出框实例,并将其挂载到指定的容器上。以下是简要代码:

// util.js

import {h, render} from 'vue';

export function initInstance(component, container, option) {const vNode = h(component, option);
    render(vNode, container);
    document.body.appendChild(container.firstElementChild);
    return vNode.component;
}

export function getContainer() {return document.createElement('div');
}

2. 自定义弹出框配置

接下来,我们定义了一个名为 portPop 的自定义弹出框配置。这个配置使用了前面封装的通用方法,同时为弹出框提供了一些特定的配置。以下是简要代码:

// common.js

import {initInstance, getContainer} from "./util";
import PortPop from "../components/PortPop";

const instanceMap = new Map();

export const portPop = (option, call) => {const container = getContainer();
    let opt = {
        ...option,
        onComfrim: (data) => {call(data);
        },
        onVanish: () => {render(null, container);
            instanceMap.delete(vm);
        },
    };
    const component = initInstance(PortPop, container, opt);
    const vm = component.proxy;
    component.exposed.openDialog();
    instanceMap.set(vm, { option: opt});
};

3. 弹出框组件实现

首先,我们要先封装一下 el-dialog 组件
 





最后,我们实现了具体的弹出框组件 PortPop,这个组件使用了 Element Plus 的 Dialog 组件,并在其中嵌套了一些其他组件,以实现特定的功能。以下是简要代码:





4. 使用自定义弹出框组件

最终,我们可以在需要调用弹出框的地方,简单地执行 portPop 方法,并传递相应的配置和回调函数。这样,弹出框就会显示出来,用户可以与之交互。

// 在需要的地方调用自定义弹出框
import {portPop} from "./customDialog";

// 示例调用
portPop({title: '自定义弹出框', defaultKeyword: '关键字'}, (data) => {
    // 处理弹出框确认后的数据
    console.log('用户选择的数据:', data);
});

文件结构示例

Vue 3   Element Plus 自定义弹出框组件实践

组定义组件文件示例
Vue 3   Element Plus 自定义弹出框组件实践

效果:

Vue 3   Element Plus 自定义弹出框组件实践

原文地址: Vue 3 Element Plus 自定义弹出框组件实践

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-07发表,共计2333字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)