Element组件库源码学习系列1(从el-button、el-button-group出发)

news/2024/7/10 0:23:47 标签: vue, vue-element源码

初识Element组件库源码

这一系列的文章主要立足ElementUI组件库,从源码出发,一步一步探索Element的设计思想,以及具体的实现方式。

文章目录

  • 初识Element组件库源码
  • 一、Element源码下载
  • 二、目录分析
  • 三、el-button、el-button-group组件实现
  • 总结

一、Element源码下载

首先我们要到Element的GitHub官网去下载最新的包,Element在github上的star数量足以表明它在广大前端程序员心中的地位
在这里插入图片描述

git地址
下载完成之后我们用编辑器打开,会看到如下的目录。
在这里插入图片描述

二、目录分析

我们主要介绍examples、packages、src这三个目录,其他目录都是一些测试、构建相关的目录,现阶段我们还接触不到。
  • examples目录其实就是我们在Element官网上看到的组件,这个文件夹里面主要放每一个组件对应的案例。

  • packages目录里面主要放如何实现组件的代码,每一个组件都分为一个src文件和一个index文件,src里面存放对应的vue文件,index主要将对应的文件暴露出去。

  • 单个组件实现过程

  • src目录里面有一个main或者index主要是将所有的组件都进行注册挂载,以及书写一些公用的函数,动画、mixins等。

三、el-button、el-button-group组件实现

el-button中button相关源代码

<template>
  <button
    class="el-button"
    @click="handleClick"
    :disabled="buttonDisabled || loading"
    :autofocus="autofocus"
    :type="nativeType"
    //动态设置class 根据不同的props显示不同的样式
    :class="[
      type ? 'el-button--' + type : '',
      buttonSize ? 'el-button--' + buttonSize : '',
      {
        'is-disabled': buttonDisabled,
        'is-loading': loading,
        'is-plain': plain,
        'is-round': round,
        'is-circle': circle
      }
    ]"
  >
    <i class="el-icon-loading" v-if="loading"></i>
    <i :class="icon" v-if="icon && !loading"></i>
    <span v-if="$slots.default"><slot></slot></span>
  </button>
</template>

<script>
   
  export default {
    name: 'ElButton',
    //inject 和provider 结合使用,也是父子组件通信的一种方式,可以全局监听不仅仅局限父子组件之间,多层的组件嵌套也可以通过provider inject进行传值
    inject: {
      elForm: {
        default: ''
      },
      elFormItem: {
        default: ''
      }
    },
	//使用props进行父子组件之间的传值,通过props接收到的值来进行组件不同样式的渲染
    props: {
    //按钮类型  支持 primary / success / warning / danger / info / text
      type: {
        type: String,
        default: 'default'
      },
      //按钮大小 支持 medium / small / mini
      size: String,
      //按钮图标
      icon: {
        type: String,
        default: ''
      },
      //原生的type属性
      nativeType: {
        type: String,
        default: 'button'
      },
      //是否为加载
      loading: Boolean,
      //是否禁用
      disabled: Boolean,
      //是否为朴素按钮
      plain: Boolean,
      //是否自动聚焦
      autofocus: Boolean,
      //是否为圆角按钮
      round: Boolean,
      //是否为圆形
      circle: Boolean
    },
   //computed 里面主要是表单按钮的一些属性
    computed: {
      //判断表单的大小
      _elFormItemSize() {
        return (this.elFormItem || {}).elFormItemSize;
      },
      //尺寸
      buttonSize() {
        return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
      },
      //是否禁用
      buttonDisabled() {
        return this.disabled || (this.elForm || {}).disabled;
      }
    },

    methods: {
    //将按钮上绑定的click事件通过$emit进行抛出到父组件中,
 	  handleClick(evt) {
        this.$emit('click', evt);
      }
    }
  };
</script>
 

el-button-group中相关源代码

<template>
  <div class="el-button-group">
    <slot></slot>
  </div>
</template>
<script>
//  通过slot槽口,可以在 <el-button-group></el-button-group> 标签里面书写多个el-button,实现按钮组的效果
export default {
  name: "ElButtonGroup",
};
</script>


总结

今天我们主要从el-button、el-button-group出发,先对这种大型的UI组件库里面实现组件的方式方法有一个初步的认知,后面我们在不断循序渐进做更加深层次的学习和总结。奥里给


http://www.niftyadmin.cn/n/1318937.html

相关文章

Element组件库源码学习系列2(探究el-collapse)

文章目录前言一、框架分析二、源码分析总结前言 这篇文章是这个系列的第二篇文章&#xff0c;主要和大家聊一下Element中的折叠面板组件的源码&#xff0c;学习一下看el-collapse是如何是实现 一、框架分析 collapse组件的src文件夹下主要分为两个文件,以及对应的index。 …

Map/Reduce 工作模式

Map-Reduce工作模式 转载于:https://www.cnblogs.com/elwiny/articles/MapReduce_2.html

Oracle9i中的性能优化方法和工具学习(三)

Oracle9i数据库中STATSPACK的使用 一&#xff0e;摘要 本文讨论STATSPACK实用工具的优点和性能&#xff0c;同时描述了如何安装、使用、配置和管理这个实用工具。 二&#xff0e;概述 STATSPACK实用工具在指定的时段中收集与单个或多个Oracle服务器性能相关的统计信息。S…

如何利用Vue-cli 打造一个自己的通用UI组件库

文章目录前言一、搭建流程二、上传流程1.基本要求2.创建个人的npm账号3.创建项目4.组件创建4.发布三、安装使用前言 这篇文章的主要内容主要的目的是向大家介绍前端工程化的第一步&#xff08;构建一个自己的通用组件库&#xff09;&#xff0c;这篇文章是工程化系列文章的第一…

Oracle9i中的性能优化方法和工具学习(四)

安装Oracle9i STATSPACK实用工具 一&#xff0e;安装STATSPACK实用工具 1.运行spcreate.sql脚本来安装STATSPACK实用工具 2.指定TOOLS表空间为PERFSTAT用户的默认表空间 3.指定TEMP表空间为PERFSTAT用户的临时表空间 二&#xff0e;设置默认快照级别 1.使用STATSPACK.SNA…

岁月静好

前言&#xff1a;这几日&#xff0c;天气渐渐转暖&#xff0c;一扫冬日的阴霾&#xff0c;心情便也相跟着渐渐平静下来。过完年后&#xff0c;工作生活也渐渐重归正轨&#xff0c;心中若有所感&#xff0c;遂静下心来&#xff0c;做下此文以记之。 春节过得很匆忙&#xff0c;匆…

利用websocket+Vuex完成一个实时聊天软件(前端部分)

文章目录前言一、效果如图二、具体实现步骤1.引入Vuex2.webscoked实现总结前言 这篇文章主要利用websocked 建立长连接&#xff0c;利用Vuex全局通信的特性&#xff0c;以及watch,computed函数监听消息变化&#xff0c;并驱动页面变化实现实时聊天。 一、效果如图 二、具体实现…

Apache Tika源码研究(五)

Apache Tika是怎么识别待解析文档的mime类型的&#xff0c;是怎么根据mime类型得到相应的解析类Parser的&#xff0c;如果我们添加自定义mime类型以及相应的解析类&#xff0c;又该怎么处理呢&#xff1f;前面的文章还没有具体解决这些关键问题 在tika-core的jar路径org.apache…