修改element-ui源码实现el-dialog自定义全屏功能

作者:小布丁时间:2026-10-25 23:30:30浏览:624

本文介绍如何在不封装组件的前提下,通过直接修改element-ui源码为el-dialog添加自定义全屏功能。步骤包括克隆官方仓库、修改component.vue中的模板与逻辑、打包生成lib文件夹,并利用patch-package生成补丁文件,最终通过postinstall命令自动应用补丁,实现项目内所有dialog的全屏控制。

背景:

element-ui自带的el-dialog组件虽然内置了全屏功能,但在实际业务场景中往往无法满足特定需求。由于系统中大量使用了dialog组件,逐一重新封装成本过高,因此选择直接修改element-ui的源代码来实现这一功能。

1.克隆element官方的仓库到本地

git clone https://github.com/ElemeFE/element

2.进入下载好的本地项目目录,执行命令安装所需的依赖包。

cd elementnpm install

3.打开package文件夹,对源代码进行针对性修改。

具体需要修改的文件路径为 package/dialog/src/component.vue。

模板部分(template):

<!-- div role="dialog" 的class修改为:-->
:class="['el-dialog', { 'is-fullscreen': isFullscreen, 'el-dialog--center': center }, customClass]"
 
<!-- 在button aria-label="Close"前添加按钮: -->
<button type="button" class="el-dialog__headerbtn" aria-label="Fullscreen" style="right: 46px;" v-if="fullscreen" @click="handleFullscreen">
     <i class="el-dialog__close el-icon el-icon-full-screen"></i>
</button>

脚本部分(script):

props: {
    ...,
    fullscreen:  { // 修改fullscreen属性,默认为true
       type: Boolean,
       default: true,
    },
    ...
}
data() {
    return {
        isFullscreen: false, // 新增全屏状态
        ...
    };
},
computed: {
    style() {
        let style = {};
        if (!this.isFullscreen) { // 判断isFullscreen
            style.marginTop = this.top;
            if (this.width) {
                style.width = this.width;
            }
        }
        return style;
    },
},
methods: {
    // 新增toggle方法
    handleFullscreen() {
        this.isFullscreen = !this.isFullscreen;
    },
    ...
}

4.打包我们修改后的源码

npm run dist

执行打包命令后,项目根目录下会生成一个 lib 文件夹,该文件夹后续将被用于替换原有组件。

5.安装 patch-package

npm i patch-package --save-dev

6.替换项目中的 element-ui

首先定位到 node_modules/element-ui/ 目录,删除该目录下的 lib 文件夹。

接着,将步骤4中生成的 lib 文件夹拷贝到 node_modules/element-ui/ 目录下,以覆盖原有文件。

7.生成 patches 补丁文件

npx patch-package package-name

执行相关命令后,项目根目录会生成一个 patches/element-ui+2.15.6.patch 的补丁文件,记录了对源码的修改。

背景:

8.新增 postinstall 命令

在 package.json 的 scripts 配置中添加 "postinstall": "patch-package",确保每次安装依赖时自动应用补丁。

背景:

9.重新安装依赖包

删除项目中的 node_modules 文件夹,以清除旧的依赖状态。

npm install 重新安装依赖并重启项目,使修改生效。

参考

作者最新文章