忙里偷闲,身为一名搬砖农民工,想兢兢业业搬好每块砖,就须要巩固和提高自我技术水平,给本身定了个小目标帮助elementUI修复缺陷或提交一个PR,有了这个目标,我就先从阅读其源码开始落实。本文为阅读elementUI源码的笔记,完整我的注释在LearnElementUI css
水平有限,文章有错误实属正常 : ) 欢迎指出,互相探讨,共同进步,轻轻轻喷哈vue
elementUI项目的组成我将其分为几大类主题:git
设计与交互:github
遵循一致性、反馈、效率和可控设计与交互原则。 dom
工程组织:async
monorepo替代Multirepos的代码管理方式,经过lerna解决core repo、changeLog等人肉维护问题。cooking简化开发依赖。工具
持续集成与发布:post
Karma 搭配 Mocha 和 Chai 等工具在 Travis CI 里作持续集成测试。学习
风格:测试
用BEM风格避免样式层级嵌套方便换肤等,用postcss落地css4风格语法。
工具类:
抽象并封装一系列工具方法,便于复用。
外部工具: async-validator/deepmerge/normalize-wheel/throttle-debounce/popper组件:
独立可复用的vue实例,组成应用的最小颗粒。
简单组件: scrollBar/popper/tooltip/formItem(validate)/collapse-transition------------------------------------------------------------------------------------------------
我先探索“组件”和“风格”而“工程组织”下次再详细探讨。elementUI由以下组件和工具类构成。
图一:包含组件
图二:包含工具类
探索一个组件须要完成什么功能,由什么构成,样式的分析,和其余组件配合时须要注意什么,完成过程当中有没有什么好的技巧?由浅入难,我找了个复杂度中等的select组件,事不宜迟,带着问题开始阅读探索。
构成与功能清单
图四:Select 组件构成
图三:Select 功能清单
Option组件
Option组件承担了以下职责:是否可选、选中、显示选项值、可选项的数目。 Option完整注解
Tag组件
Tag组件承担了删除选项事件派发职责。Tag完整注解
Option-Group组件
没有承担什么职责,主要作派发操做如:查询值变化、选项分组可选变化。
Select-dropdown组件
Select-dropdown组件主要职责是做为popper容器,popper用于实现下拉浮动效果,因此咱们先看看popper是如何实现的。
Popper
popper由下图构成并经过执行对应的modifier处理偏移数据。原做者的注释很是的完善,我就只着重的标识了些须要注意的地方。完整注释
功能清单
每一个功能一个小结,每一个小结带上技巧分析 疑问 ## ### 功能清单 ##
好了,完成了第一个组件的探索,沉溺学习不可自拔哈哈,下篇就要探索“工程组织”搭建一个组件小实验室,便于后续源码探索与实验。