element-ui button 组件源码分享

element-ui button 源码分享,基于对源码的理解,编写一个简单的 demo,主要分三个模块来分享:

 一、button 组件的方法。

1.1 在方法这块,button 组件内部通过暴露 click 方法实现,具体如下:

二、button 组件的计算属性。

2.1 button 组件当中使用的三个计算属性如下:

三、button 组件的属性。

通过官网我们知道 button 有 size、type、plain、round、circle、loading、disabled、icon、autofocus、native-type 这些属性,那么它是怎么通过传入的这些属性来控制按钮样式的呢?让我们通过对源码的探索来破解它吧。

3.1 size 属性,一般控制按钮的大小,它的尺寸有三种 medium / small / mini,我们可以在源码当中找到这些设置,如下图所示:

3.1.1 通过上图我们知道,真正控制 button 尺寸的并不完全是 size 属性,那么还有什么其他影响因素呢?通过搜索我们在 watch 里面找到了 buttonSize 方法,源码里 buttonSize 方法的返回值来源于三个变量,优先使用所传入的 size 变量,如下图:

3.1.2 通过对 buttonSize 打印可以看到以下信息,如下图所示:

3.1.3 this._elFormItemSize 在哪里可以找到?作用是什么?

3.1.4 上面说了一堆,有人可能会迷惑,找这些东西干什么用呢?又能证明什么呢?莫慌,多一丢丢儿耐心往下看哈。

3.1.5 this.$ELEMENT 这个是全局的变量,在 /examples/entry.js 文件中进行全局设置

3.1.6 简单总结一下 button 按钮 size 属性:

  • button 按钮的 size 若传则取所传的值
  • button 按钮的 size 未传且不在 form 表单中,默认取 middle
  • button 按钮的 size 为传且在 form 表单中,且 form 表单有设置 size,这取 form 表单的 size
  • button 按钮的 size 未传且不在 form 表单中,但设置了全局变量 $ELEMENT.size,则取全局变量中的 size

3.2 type 属性,控制按钮的样式,类型有 primary / success / warning / danger / info / text

3.2.1 通过传入 type 值,样式表中有之对应的样式,如下图:

上面的样式翻译过来大致是这样的:

.el-button--primary:first-child {  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--primary:last-child {  border-left-color: rgba($--color-white, 0.5);  
}  .el-button--primary:not(:first-child):not(:last-child) {  border-left-color: rgba($--color-white, 0.5);  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--success:first-child {  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--success:last-child {  border-left-color: rgba($--color-white, 0.5);  
}  .el-button--success:not(:first-child):not(:last-child) {  border-left-color: rgba($--color-white, 0.5);  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--warning:first-child {  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--warning:last-child {  border-left-color: rgba($--color-white, 0.5);  
}  .el-button--warning:not(:first-child):not(:last-child) {  border-left-color: rgba($--color-white, 0.5);  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--danger:first-child {  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--danger:last-child {  border-left-color: rgba($--color-white, 0.5);  
}  .el-button--danger:not(:first-child):not(:last-child) {  border-left-color: rgba($--color-white, 0.5);  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--info:first-child {  border-right-color: rgba($--color-white, 0.5);  
}  .el-button--info:last-child {  border-left-color: rgba($--color-white, 0.5);  
}  .el-button--info:not(:first-child):not(:last-child) {  border-left-color: rgba($--color-white, 0.5);  border-right-color: rgba($--color-white, 0.5);  
}

3.2.2 plain 属性,是否朴素按钮,布尔类型,默认 false

上面的样式翻译过来大致是这样的:

.is-plain,  
.is-plain:hover,  
.is-plain:focus {  background-color: $--color-white;  border-color: $--button-disabled-border-color;  color: $--button-disabled-font-color;  
}

3.2.3 round 属性,是否圆角按钮,布尔类型,默认 false

3.2.4 circle 属性,是否圆形按钮,布尔类型,默认 false

3.2.5 loading 属性,是否加载中状态,布尔类型,默认 false

注意:如果使用了自定义图标 icon,可以使用 element-ui icon 组件里面有的图标,也可以自定义一个图标,其实在这里传的 icon 就是 class(通过上面的图很容易看出)。

3.2.6 disabled 属性,是否禁用状态,布尔类型,默认 false

补充说明(buttonDisabled):

tip1:在 Vue 2 中,this.$options 是一个对象,它包含了组件的初始化选项。这些选项是组件定义时通过 option 属性传入的。通过 this.$options,你可以访问到组件的配置信息,包括生命周期钩子函数、自定义方法、属性等。

tip2:Vue2的 propsData 主要用于在组件初始化时传递数据。propsData 选项是一个对象,其中包含了要传递给组件的属性值。这些属性值可以在组件的data函数中被访问和使用。

上面的样式翻译过来大致是这样的:

.disabled,  
.disabled:hover,  
.disabled:focus {  color: $--button-disabled-font-color;  cursor: not-allowed;  background-image: none;  background-color: $--button-disabled-background-color;  border-color: $--button-disabled-border-color;  
}  .el-button--text.disabled {  background-color: transparent;  
}  .is-plain.disabled,  
.is-plain.disabled:hover,  
.is-plain.disabled:focus {  background-color: $--color-white;  border-color: $--button-disabled-border-color;  color: $--button-disabled-font-color;  
}

3.2.7 disabled 属性,图标类名,string 类型,默认""

3.2.8 autofocus 属性,是否默认聚焦,布尔类型,默认 flase

3.2.9 native-type 属性,原生 type 属性,string 类型,button / submit / reset,默认 button

3.2.9  button slot 卡槽分发:

举个栗子:

总结:

看似简单的 button 按钮,看完源码后会发现里面会有很多值得我们去学习去思考的知识,因此希望可以一直保持好奇心,将剩下的组件一并研究明白并分享出来。

关于 button 按钮的源码分享部分就先到这里了,由于篇幅比较长,这里就不再做基于源码后的 demo 分享了,有时间下次专门写一篇关于基于源码理解后的 button demo 分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户体验优化:HubSpot的秘密武器

在当今数字化市场中,提升用户体验已经成为企业成功的关键因素之一。HubSpot,作为一款领先的营销自动化工具,不仅在推动销售业绩上表现出色,同时通过其独特的策略也致力于提升用户体验。运营坛将深入探讨HubSpot是如何通过个性化推…

使用gcc/g++查看C语言预处理,编译,汇编,连接,以及动静态库的区分

文章目录 使用gcc/ggcc如何完成编译后生成可执行文件?预处理(进行宏替换)编译(生成汇编)汇编(生成机器可识别代码)连接(生成可执行文件或库文件)最后记忆小技巧 在这里涉及到一个重要的概念&…

阿里云如何找回域名,进行添加或删除?

权威域名管理介绍说明,包含添加域名、删除域名、找回域名、域名分组等操作介绍。 一、添加域名 非阿里云注册域名或子域名如需使用云解析DNS,需要通过添加域名功能,将主域名或子域名添加到云解析控制台,才可以启用域名解析服务。…

关于bypassuac的探究——bypass的实现

经过前面的探究过后,我们整理下思路,首先要创建注册表,并添加DelegateExecute这个键值对,并修改command的指向exe路径即可bypassuac,那么这里用到一下几个函数 RegCreateKeyExA 首先是创建注册表项,对应的…

figure方法详解之清除图形内容

figure方法详解之清除图形内容 一 clf():二 clear():三 clear()方法和clf()方法的区别: 前言 Hello 大家好!我是甜美的江。 在数据可视化中,Matplotlib 是一个功能强大且广泛使用的库,它提供了各种方法来创建高质量的图形。在 Mat…

Multisim14.0仿真(四十一)交通信号灯仿真设计

一、功能简介: 1)、采用两片74LS192做减法计数器,实现倒计时功能。 2)、采用DCD数码管显示时间。 3)、采用4个TRAFFIC_LIGHT_SINGLE红绿灯 4)、采用74LS160和74LS138实现对红绿灯的逻辑控制。 5&#xff09…

【JavaEE进阶】 图书管理系统开发日记——叁

🌴前言 在前面我们实现了用户登录的接口。现在我们来实现图书列表展示页面。 🎋数据准备 创建图书表,并初始化数据 -- 图书表 DROP TABLE IF EXISTS book_info; CREATE TABLE book_info (id INT ( 11 ) NOT NULL AUTO_INCREMENT,book_nam…

什么样的软件,可以搜大学题?解决难题不费神,尽在大学搜题工具! #媒体#其他

学会运用各类学习辅助工具和资料,是大学生培养自主学习能力和信息获取能力的重要途径之一。 1.千鸟搜题 这个是公众号 涵盖往年成人各类考试,题库有建筑类、金融类、医药卫生类、公考类、安全生产类、特种作业类等试题 下方附上一些测试的试题及答案 …

【自动化测试】---Selenium+Java

1.自动化测试分类 接口自动化测试UI自动化测试(移动端自动化测试、Web端自动化测试) 2.选择Selenium作为web自动化工具原因(面试题) 开源免费支持多个浏览器支持多个系统支持多语言Selenium包提供很多供测试使用的API 3.自动化是什…

深度学习入门笔记(五)前馈网络与反向传播

接着上一节,本节讲解模型自我学习的数学计算过程究竟是怎么样的。 5.1 前馈网络 一个最简单的前馈神经网络如图所示,对于每一个隐藏层,输入对应前一层每一个节点权重乘以节点输出值,输出则是经过激活函数(例如sigmoid函数)计算后的值。 在这样的网络中,输入的数据 x 经…

生物素-PEG4-酪胺,Biotin-PEG4-TSA,应用于酶联免疫吸附实验

您好,欢迎来到新研之家 文章关键词:生物素-PEG4-酪胺,Biotin-PEG4-Tyramide,Biotin-PEG4-TSA 一、基本信息 产品简介:Biotin PEG4 Tyramine is a reagent used for tyramine signal amplification (TSA) through ca…

wpsjs如何打开本机浏览器

目前在wps开发平台上还没找到直接调起浏览器的api,不过可以通过点击超链接会自动打开浏览器的特性取巧去触发 let aaApplication.ActiveSheet.Hyperlinks.Add(Application.ActiveSheet.Range(H6), "https://www.i5a6.com");//创建超链接 aa.Follow();//执行超链接