阅读源码入门实践系列之 element ui(1)

简介: 阅读源码入门实践系列之 element ui(1)

1、为啥要写本篇?

  • 有好几个小伙伴问我如何去阅读源码?如何成为开源项目贡献者? 短暂思考后先带你入门,回答第一部分

ps: 这篇不是告诉你如何理解每部分内容,会说个主要过程,然后写一个组件来说明这个事情

2、怎么拿到源码?

  • 1、 上github 搜索 element
  • 2、去官网 然后 找到入口

github.com/ElemeFE/ele…

网络异常,图片无法展示
|

  • 3、拿到本地
git clone git@github.com:ElemeFE/element.git
复制代码
  • 4、跑起来(安装依赖 yarn/npm i , 暂不跑)

3、如何读源码?

  • 这个网上有很多的思路,此处 仅展示我的思路
0、最好看源码之前,使用过这个产品 比如 element ui
1、先看文件夹主要结构 先看 package.json 重点关注 script 里面的内容 告诉你怎么跑脚本
2、看 src 然后 找 index.js 入口文件
3、找到 单个组件 比如 此处以 Button 组件为例
4、主要看 主体 如何 封装 templete,然后 事件怎么向上抛出的 $emit ,这两块 我相信都能看懂啥意思
5、scss 在哪里 ? 
6、常量定义在哪里 ?
7、写完之后  test 测试 写在哪里 ?
8、其他部分先不仔细说明了 
复制代码
  • index.js 入口文件

网络异常,图片无法展示
|

  • Button 组件为例

网络异常,图片无法展示
|

  • scss 在哪里 ?

网络异常,图片无法展示
|

  • 常量定义在哪里 ?

网络异常,图片无法展示
|

网络异常,图片无法展示
|

4、按照这种思路写一个组件?

  • 这个组件为初版本,请勿较真,仅做学习讨论,自然有很多优化点
<template>
    <div>
        <div class="button_container">
            <span class="button_text">{{ formItemValue.formLabel }}</span>
            <div class="button_right">
                <pf-button @click="handleAddFormItem">{{ formItemValue.add }}</pf-button>
                <Form class="page-detail-form" ref="whiteListForm" :model="formData" :rules="rules" labelPosition="left">
                    <FormItem>
                        <div class="button_group">
                            <pf-upload action="" :before-upload="beforeUpload" :multiple="false" accept=".xls,.xlsx">
                                <pf-button type="ghost">{{ formItemValue.moreAdd }}</pf-button>
                            </pf-upload>
                        </div>
                    </FormItem>
                </Form>
                <pf-button @click="deleteAllFormItem">{{ formItemValue.deleteAll }}</pf-button>
                <pf-button type="ghost" @click="downloadTemplate">{{ formItemValue.downLoadExcel }}</pf-button>
            </div>
        </div>
        <hr />
        <div>
            <span class="button_text button_text_order">{{ formItemValue.order }}</span>
            <span class="button_text ">{{ formItemValue.name }}</span>
        </div>
        <Form :model="formItem" :label-width="80">
            <FormItem v-for="item in formItem" :key="item.prop" :prop="item.prop" :label="item.label">
                <span>{{ item.order_number }}</span>
                <Input v-model="item.input"></Input>
                <pf-button @click="handleDeleteItemSelf(item.order_number)">{{ item.delete }}</pf-button>
            </FormItem>
        </Form>
        <pf-button class="button_right" @click="handleModalShow">{{ formItemValue.submit }}</pf-button>
        <Modal v-model="formItemValue.show" title="确认提交吗?" style="textAlign:center"></Modal>
    </div>
</template>
<script>
import { xlsxUtils } from '@/utils/xslx';
export default {
    name: 'package',
    components: {},
    data() {
        return {};
    },
    props: ['formItem', 'formItemValue', 'delete', 'deleteAll', 'add'],
    computed: {},
    methods: {
        handleModalShow() {
            this.formItemValue.show = true;
        },
        handleAddFormItem() {
            this.$emit('add');
        },
        handleDeleteItemSelf(id) {
            this.$emit('delete', id);
        },
        deleteAllFormItem() {
            this.$emit('deleteAll');
        },
        downloadTemplate() {
            const data = [{ id: 'id' }];
            const blob = xlsxUtils.export({ Sheet1: data });
            saveAs(URL.createObjectURL(blob), 'data_template.xlsx');
        },
    },
};
</script>
<style lang="less">
.button_container {
    padding: 20px;
}
.button_right {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    float: right;
}
.pf-btn {
    margin: 8px;
}
.button_text {
    display: inline-block;
    margin-top: 12px;
    border: 1px solid;
    padding: 5px;
}
.button_text_order {
    margin-left: 70px;
    margin-right: 120px;
}
.pf-input {
    width: 300px;
    text-align: center;
}
.pf-form-item {
    padding: 5px;
}
.pf-input-wrapper {
    width: 26%;
}
.pf-upload-list {
    margin-top: -25px;
}
</style>
复制代码
  • 使用这个组件
<NewList :formItem="formItem" :formItemValue="formItemValue" @delete="deleteAllFormItem" @add="addFormItem" @upload="uploadExcel"></NewList>
复制代码

5、结果展示 ?

网络异常,图片无法展示
|

6、更多思考 ?

  • 1、需要考虑 封装为公共组件
  • 2、需要将结构进一步简化
  • 3、将css 可以抽离出去
  • 4、可以将这个组件分成多个小组件 再组合起来
  • ......

7、什么,你还很激动 ?

欢迎去主页 快乐 追文, 更多快乐 ,敬请期待 ......

github(点个 star 你会变得更强(不会秃))

github.com/huanhunmao/…



相关文章
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
46 1
|
14天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
55 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
API UED 容器
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
在这篇博客中,我们将深入探讨 Element UI 中的自定义滚动条及弹出层管理技巧。文章详细介绍了 el-scrollbar 组件的使用和参数设置,以及 PopupManager 如何有效管理弹出层的 z-index。我们还将探讨如何实现灵活的全屏组件,利用 vue-popper 创建自定义弹出层,最后介绍 ClickOutside 指令的用法。这些高级技巧将帮助你提升 Element UI 应用程序的用户体验与交互灵活性。
200 1
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
|
1月前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
113 0
|
2月前
|
前端开发 JavaScript
React技术栈-React UI之ant-design使用入门
关于React技术栈中使用ant-design库的入门教程,包括了创建React应用、搭建开发环境、配置按需加载、编写和运行代码的步骤,以及遇到错误的解决方法。
39 2
React技术栈-React UI之ant-design使用入门
|
2月前
|
C# Android开发 开发者
Uno Platform 高级定制秘籍:深度解析与实践样式和模板应用,助你打造统一且高效的跨平台UI设计
【9月更文挑战第7天】Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 创建跨平台 UI 应用,覆盖 Windows、iOS、Android、macOS 和 WebAssembly。本文介绍 Uno Platform 中样式和模板的应用,助力开发者提升界面一致性与开发效率。样式定义控件外观,如颜色和字体;模板则详细定制控件布局。通过 XAML 定义样式和模板,并可在资源字典中全局应用或嵌套扩展。合理利用样式和模板能简化代码、保持设计一致性和提高维护性,帮助开发者构建美观高效的跨平台应用。
58 1
|
3月前
|
搜索推荐 数据库
最新UI六零导航系统源码 | 多模版全开源
使用PHP+MySql,增加后台管理 多模板选择,支持在后台切换模板 增加常用搜索引擎,如:知乎、哔哩哔哩、在线翻译等(支持自定义) 支持用户提交收录申请,地址:http://域名/apply 部分模板优化和增加部分功能,如返回顶部、获取输入框焦点、时间日期显示等
75 1
|
3月前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
115 0
|
3月前
|
JavaScript 前端开发 开发者
决战前端之巅!Element UI与Vuetify谁才是Vue.js组件界的霸主?一场关于颜值与实力的较量!
【8月更文挑战第30天】本文对比了两款热门的Vue.js组件库——Element UI与Vuetify。Element UI由饿了么团队打造,提供多种高质量UI组件,设计简洁大方。Vuetify基于Material Design规范,支持Vue.js 2.0及3.0版本,具备前瞻性。两者均涵盖表单、导航、数据展示等组件,Element UI配置选项丰富,而Vuetify则提供了更深层的样式定制功能。开发者可根据项目需求及个人偏好选择合适的组件库。
268 0
|
3月前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
187 0
下一篇
无影云桌面