背景

我司OA系统公文管理模块Office在线编辑使用的是金格IWebOffice中间件【PPAPI插件,通过<object>标签加载】,IWebOffice在chrome中设置div盒子的css样式display:none会造成控件的奔溃,出现空白等异常情况。用过ElementUI的都知道Tabs标签页,标签之间切换用的正是display属性,笔者要改的是使用width:0px;height:0px;opacity:0;visibility:hidden;做标签的切换。

Fork element 源码

GitHub仓库地址:https://github.com/ElemeFE/element

首先Fork一份源码到自己的github帐号。

接着使用git命令行工具将源码clone到本地。

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

笔者项目中使用的是 element 2.5.4 版本,所以从 2.5.4 这个tag签出一个自己的分支进行开发。

git checkout -b v2.5.4 lk-element-ui  #从 v2.5.4 tag 创建分支

本地调试 element

npm install #安装相应的依赖包
npm run dev #运行调试,如果有报错看看是否为 ESlint 语法检测提示的错误。

修改 tabs 源码

为了不污染源码,笔者复制 tab-pane.vue 新建了一个自己的组件并命名为 LoElTabPane,修改其内的源码如下:

接着修改 tabs.vue 中代码使其支持 新加的组件:

组件修改好后需要导出并进行全局注册。

全局注册 LoTabPane

在 packages 文件夹下增加 lo-tab-pane 文件夹并添加 index.js 文件,该文件主要用于导出 LoTabPane 。

import LoTabPane from '../tabs/src/lo-tab-pane.vue';

/* istanbul ignore next */
LoTabPane.install = function(Vue) {
Vue.component(LoTabPane.name, LoTabPane);
}; export default LoTabPane;

接着修改根目录下的 components.json 文件,在文件中加入 lo-tab-pane 。该文件的主要作用是在构建时生成 src/index.js,在 index.js 中进行了组件的全局注册和导出。

"lo-tab-pane": "./packages/lo-tab-pane/index.js",

添加组件 TypeScript 支持

在 types 目录下新建 lo-tab-pane.d.ts 文件,除了类名外其他内容和 tab-pane.d.ts 相同。

import { ElementUIComponent } from './component'

/** Tab Pane Component */
export declare class LoElTabPane extends ElementUIComponent {
/** Title of the tab */
label: string /** Whether Tab is disabled */
disabled: boolean /** Identifier corresponding to the activeName of Tabs, representing the alias of the tab-pane */
name: string /** Whether Tab is closable */
closable: boolean /** Whether Tab is lazily rendered */
lazy: boolean
}

同时在 types/element-ui.d.ts 文件中导入新增的类。

import { LoElTabPane } from './lo-tab-pane' // 导入

export class LoTabPane extends LoElTabPane {} // 导出

添加组件到 examples 菜单

组件开发完成后添加到 examples 中进行测试。

拷贝 examples\docs\zh-CN\tabs.md 到同级目录并命名为 lo-tabs.md,将其内的 el-tab-pane 组件换成 lo-el-tab-pane。

在 examples\nav.config.json 中增加 lo-tabs 菜单。

组件发布

网上博友说修改包名和版本号可以将自己DIY出的 element 发布到 npm,使用 npm install 安装使用。其实这种做法是错误的误导,笔者亲验纯属瞎扯蛋。

使用 npm run dist 打包后的文件在 lib 文件夹下,其中 element-ui.common.js 为包入口,打开这个文件可以看到存在很多类似

module.exports = require("element-ui/lib/mixins/emitter");

这样的代码,使用的都是 element-ui 开头的相对路径。如果你的包名换成其他,我敢保证在项目中打包的时候会报 xxx not find 错误。

正确的做法应该是将包发布到 git仓库,如github这样的平台,使用 npm install git仓库 这样的方式安装。

npm install git+https://github.com/itwmike/element.git

本文转载自:https://www.limitcode.com/detail/5db589bf10dcbf0b1852b349.html

ElementUI 源码定制防坑指南的更多相关文章

  1. elementUI源码修改定制

    1.修改elementUI源码 首先从Git上克隆代码或者下载代码包 进入文件夹打开终端或Git Bash Here,运行npm install 安装依赖包.npm run dev 打开网页http: ...

  2. SpringBoot整合log4j2进行日志配置及防坑指南

    写在前面 最近项目经理要求将原先项目中的日志配置logBack,修改为log4j2,据说是log4j2性能更优于logback,具体快多少,网上有说快10多倍,看来还是很快的,于是新的一波挑战又开始了 ...

  3. 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  4. 漫谈可视化Prefuse(六)---改动源码定制边粗细

    可视化一路走来,体会很多:博客一路写来,收获颇丰:代码一路码来,思路越来越清晰.终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行. 跌跌撞撞整合了个可视化小tool,零零碎碎结交了众多的志同道合 ...

  5. 用Scratch2.0源码定制一个自己的编辑器

    用Scratch2.0源码定制一个自己的编辑器,换成自己的软件名称和图标,添加中文字体,修复汉化错误等等1.准备:下载Scratch2.0源码.安装开发工具Adobe Flash Builder4.7 ...

  6. LineageOS源码定制手机系统

    LineageOS源码定制手机系统 导语: 现在市场的手机基本就两种:  苹果机和android机. 今天我们不谈苹果机, 对小编我来讲,那是个奢侈品, android是我的最爱.对于一般androi ...

  7. position: sticky 防坑指南

    position: sticky 防坑指南:https://www.jianshu.com/p/e217905e8b87 今天在写小程序项目的时候碰到一个需求是要把轮播图下面的标签栏滑动到顶部后固定, ...

  8. 记一次ElementUI源码修改过程

    修改目的 使用ElementUI el-tree过程发现选中节点,键盘移动上下键时(key down\key up)el-tree默认高亮移动的节点,业务上需要重写此事件. ​从官网发现该事件没有暴露 ...

  9. 05.ElementUI源码学习:项目发布配置(github pages&npm package)

    0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...

随机推荐

  1. 2019暑假Java学习笔记(三)

    目录 面向对象 对象 构造方法 引用与对象实例 static final 封装 this 继承 super 方法重载与重写 多态 抽象类 接口 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 ...

  2. TCP/IP协议栈中的TimeStamp选项

    原文转自:http://www.cnblogs.com/lovemyspring/articles/4271716.html TCP应该是以太网协议族中被应用最为广泛的协议之一,这里就聊一聊TCP协议 ...

  3. C# System.Web.Mail.MailMessage 发邮件

    C# System.Web.Mail.MailMessage 发邮件 新建控制台Console项目,然后添加 System.Web引用 代码如下: using System; using System ...

  4. canvas api 速记

    基本骨骼 <canvas id="canvas" width=1000 height=1000 style="border: 1px black dotted&qu ...

  5. Android NFC M1卡读写&芯片卡读写(CPU卡读写)(RFID读写)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sgn5200/article/detai ...

  6. jsp页面获取后台传过来的list集合的长度

    在jsp页面导入函数标签库: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"% ...

  7. CefSharp 提示 flash player is out of date 运行此插件 等问题解决办法

    CefSharp 提示 flash player is out of date 或者 需要手动右键点 运行此插件 脚本 等问题解决办法 因为中国版FlashPlayer变得Ad模式之后,只好用旧版本的 ...

  8. 【Linux】使用 walle + docker-compose 部署上线单获取不到分支的解决办法

    背景: 使用walle+docker 自动化部署项目.在新建上线单时候拉取不到分支,并提示有错误.但是没有错误信息 错误排查: 首先确保远程仓库已添加宿主机公钥,且一定先在宿主机手动连接一下远程仓库, ...

  9. [Design Patterns] 02. Structural Patterns - Facade Pattern

    前言 参考资源 史上最全设计模式导学目录(完整版) 只把常用的五星的掌握即可. 外观模式-Facade Pattern[学习难度:★☆☆☆☆,使用频率:★★★★★] 深入浅出外观模式(一):外观模式概 ...

  10. postgrelsql 的 wm_concat : string_agg

    string_agg,array_agg 这两个函数的功能大同小异,只不过合并数据的类型不同 array_agg(expression) 把表达式变成一个数组 一般配合 array_to_string ...